Shift ada device numbers?
spellberg_robert
emailrob at emailrob.com
Wed Jun 28 02:36:58 UTC 2017
On 06/26/17 16:31, Luciano Mannucci wrote:
>
> Hello all,
>
> I have a FreeBSD 10.3 RELEASE machine whith root on zfs on two discs
> and a "standalone" SSD holding database data. I noticed that if I move
> the SSD disk to another SATA controller it becomes ada0 and the members
> of the zfs are shifted to ada1 and ada2, and the system doesn't work:
> in fact it stops at boot because I've put the swap on the ssd and it
> can't find it anymore.
>
> Is there a way to control whichnumbers are assigned to the disks at
> boot time?
>
> Many thanks,
>
> Luciano.
>
2017_jun_27_tue 25.04.--.utc
dear luciano ---
i have never tried "zfs" , so i do not know if this idea is fs_independent .
however , on my x86_64 10.3 gpt ufs box , this works .
make this inquiry :
ls -l /dev/ad*
do you see sym_links that look like :
/dev/ad* -> /dev/ada*
if not , then the rest of this post may not help you ; if so , then read
on .
as you are painfully aware , the "ada" entries behave according to
that highly_regarded and much_loved import from "big redmond" ,
which i call "drive_letter lottery" .
on the other hand , the "ad" entries are attached to the mobo
drive_cable sockets
in a --fixed-- fashion that is --tbd-- .
currently , all of my new moboes [ skylake cpu , 100_series chipset ]
have 6 "sata" sockets [ and others , of course ] .
when i build a new box [ currently , 4 ; 2 more , soon ] , i install 3
sata_drives ,
having --different-- capacities or model_numbers or some_such ,
noting the mobo_written socket_names as i go .
all of my boxen have , at least , 3 sata_drives [ no ssd , as yet ] .
later , to the 3 , i can add more , as needed .
after the os_install is complete , i inspect the boot_messages [
scroll_lock , "/var/run/dmesg.boot" , et_c ] .
i note the drive_related messages for later inclusion into a
revised_and_extended "/etc/fstab" .
here are the relevant lines from "/var/run/dmesg.boot" on one box :
[ snip from bof ]
acpi0: <ALASKA A M I > on motherboard
[ snip ]
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
[ snip ]
ahci0: <AHCI SATA controller> port
0xf090-0xf097,0xf080-0xf083,0xf060-0xf07f mem
0xf7228000-0xf7229fff,0xf722c000-0xf722c0ff,0xf722b000-0xf722b7ff irq 16
at device 23.0 on pci0
ahci0: AHCI v1.31 with 6 6Gbps ports, Port Multiplier not supported
ahcich0: <AHCI channel> at channel 0 on ahci0
ahcich1: <AHCI channel> at channel 1 on ahci0
ahcich2: <AHCI channel> at channel 2 on ahci0
ahcich3: <AHCI channel> at channel 3 on ahci0
ahcich4: <AHCI channel> at channel 4 on ahci0
ahcich5: <AHCI channel> at channel 5 on ahci0
[ snip ]
[ i have added some blank lines to this next set to emphasize grouping ;
i did not change the line_order ]
[ this is the important group ]
[ note that , because they are different , each drive can be identified
with certainty ]
[ also , the "cd0" tray is not empty ]
ada0 at ahcich0 bus 0 scbus0 target 0 lun 0
cd0 at ahcich1 bus 0 scbus1 target 0 lun 0
cd0: <ASUS DRW-24B1ST j 1.00> Removable CD-ROM SCSI device
cd0: Serial Number G1D0CL016003
cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)
cd0: 4421MB (2263638 2048 byte sectors)
ada0: <ST4000NM0033-9ZM170 SN04> ACS-2 ATA SATA 3.x device
ada0: Serial Number Z1ZAJ3DY
ada0: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada0: Command Queueing enabled
ada0: 3815447MB (7814037168 512 byte sectors)
ada0: Previously was known as ad4
ada1 at ahcich3 bus 0 scbus3 target 0 lun 0
ada1: <ST1000NM0033-9ZM173 SN04> ACS-2 ATA SATA 3.x device
ada1: Serial Number Z1W4L2KA
ada1: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada1: Command Queueing enabled
ada1: 953869MB (1953525168 512 byte sectors)
ada1: Previously was known as ad10
ada2 at ahcich5 bus 0 scbus5 target 0 lun 0
ada2: <ST2000NM0033-9ZM175 SN04> ACS-2 ATA SATA 3.x device
ada2: Serial Number Z1X63F5R
ada2: 600.000MB/s transfers (SATA 3.x, UDMA6, PIO 8192bytes)
ada2: Command Queueing enabled
ada2: 1907729MB (3907029168 512 byte sectors)
ada2: Previously was known as ad14
[ snip to eof ]
next , i add a comment_section to the "fstab" that summarizes the above
[ save the old version , of course ] .
note that cables are attached to the un_used connectors ; this is more
"finger_friendly" .
the mobo_socket names are "sata6G_*" , for this mobo .
here are the relevant lines from "/etc/fstab" on the same box .
[ note that i like long lines , for easy "grep"ping ]
[ snip from bof ]
#.
#srl sym_link device asus z170_k size mount cable .
#.
#srl /dev/ad4 -> /dev/ada0 sata6G_1 ahci ch 0 bus 0 scbus 0 target
0 lun 0 4_000_GB /+8_arch black__straight .
#srl /dev/cd0 sata6G_2 ahci ch 1 bus 0 scbus 1 target 0 lun 0
/cdrom black__right_angle .
#srl /dev/ad^ -> /dev/ada^ sata6G_3 ahci ch ^ bus ^ scbus ^ target
^ lun ^ blue .
#srl /dev/ad10 -> /dev/ada1 sata6G_4 ahci ch 3 bus 0 scbus 3
target 0 lun 0 1_000_GB system , data red .
#srl /dev/ad^^ -> /dev/ada^ sata6G_5 ahci ch ^ bus ^ scbus ^
target ^ lun ^ blue .
#srl /dev/ad14 -> /dev/ada2 sata6G_6 ahci ch 5 bus 0 scbus 5
target 0 lun 0 2_000_GB /+9_arch red .
#.
#.
#.
# Device Mountpoint FStype Options Dump Pass#
#.
/dev/ad10p2 none swap sw 0 0
#.
/dev/ad10p3 / ufs rw 1 1
#.
/dev/ad10p4 /var ufs rw 2 2
#.
/dev/ad10p5 /usr ufs rw 2 2
/dev/ad10p6 /usr/local ufs rw 2 2
/dev/ad10p7 /usr/ports ufs rw 2 2
#.
/dev/ad10p8 /+0_gp ufs rw 2 2
/dev/ad10p9 /+1_dnld ufs rw 2 2
/dev/ad10p10 /+2_cache ufs rw 2 2
/dev/ad10p11 /+3_lib ufs rw 2 2
/dev/ad10p12 /+4_spare ufs rw 2 2
#.
#.
#.
/dev/ad4p1 /+8_arch ufs rw 2 2
#.
/dev/ad14p1 /+9_arch ufs rw 2 2
#.
#.
#.
/dev/cd0 /cdrom cd9660 rw,noauto 0 0
#.
[ snip ]
[ note that , also , i include the original version , for easy reference ]
#.
#... #srl this is the installed version ; here , it is
commented out .
#.
# Device Mountpoint FStype Options Dump Pass#
# /dev/ada1p2 none swap sw 0 0
# /dev/ada1p3 / ufs rw 1 1
# /dev/ada1p4 /var ufs rw 2 2
# /dev/ada1p5 /usr ufs rw 2 2
# /dev/ada1p6 /usr/local ufs rw 2 2
# /dev/ada1p7 /usr/ports ufs rw 2 2
# /dev/ada1p8 /+0_gp ufs rw 2 2
# /dev/ada1p9 /+1_dnld ufs rw 2 2
# /dev/ada1p10 /+2_cache ufs rw 2 2
# /dev/ada1p11 /+3_lib ufs rw 2 2
# /dev/ada1p12 /+4_spare ufs rw 2 2
# /dev/ada2p1 /+9_arch ufs rw 2 2
# /dev/ada0p1 /+8_arch ufs rw 2 2
#.
[ snip to eof ]
>----> the revised "fstab" uses the --"ad"-- names , not the --"ada"-- names .
that is the whole point of the effort .
to answer your specific question , sir ,
> is there a way to control which numbers are assigned to the disks at boot time ?
the answer is "yes" .
once you have a map of which "/dev/ad*" name is attached to which
connector , you may select which one you want to use for which device .
then , no matter how you plug_in other devices to other connectors , the
fixed names will not move , no matter how the variable names dance .
what you need to do is to decide upon those devices which are to be
installed permanently or semi_permanently and those devices whose
installations are to be more temporary in nature .
other_wise , you will need to have multipla versions of "/etc/fstab" ; i
am not certain that you want to travel that route .
at the very least , one --must-- decide where the root_fs is going to
reside .
finally , i seem to recall that there is another way to get at
connector_specific device_names ; however , i do not know this for certain .
consequently , the above may_or_may_not be "the best of all possible
worlds" [ thank you , pangloss ] .
the important thing is that it works .
there_fore , if there is another way and it proves to be more involved
or difficult , then the above can be implemented quickly and be in_use ,
while other approaches are evaluated .
of course , if there is --not-- another way , then the above --still--
works and pangloss is over_joyed .
what i --do-- know is that , when i leap_frogged from 8.4 to 9.3 ,
"drive_letter lottery" suddenly appeared .
seeing the sym_links in "/dev" , the above work_around was obvious ; i
tried it , it worked ; so , i leave it alone .
i have never understood why it is "a good thing" to break a working
system as a consequence of attaching a temporary device .
ciao ,
rob
-------------------------------------------------------------------
ps [ specifically , to the fbsd_project decision_makers ] ---
"labelling" may solve some problem for some people , perhaps for many .
it is not my objective to deny others their joy .
however , i have never done this ; i can not imagine why i would want to
begin doing so .
probably , i am not doing the kinds of things that those other people
are doing .
so , i do not see why others should deny me mine .
i am a hardware_oriented fellow .
i write leaves in assembly , still ; to me , "avx-512" means --registers-- .
frequently , i swap "stuff" , from this box to that , from this cable to
that , et_c .
especially , this is true of hard_drives .
"drive_letter lottery" gets in my way .
this is the one thing that really angered me about "ms_dos" , when
writing "dot_bat" scripts , some 20_odd years ago .
for fbsd , i was --thrilled-- to discover that "/dev" names were
immutable to drive_cable sockets .
so , here is what i want .
for each combination of mobo and os_revision , there should be a fixed
name in/under "/dev" for each mobo_socket .
that way , once a given mobo has a given os_revision installed , i may
plug/mount and umount/un_plug with impunity .
of course , different moboes and/or different os_revisions may cause the
names to be different .
no problem .
for each combination , i have to make the determination --once-- , only .
if the fixed names are present , then i do not care how many variable
names are present , also , for the benefit of those who want them .
here is a proposed solution .
i suspect that both approaches can exist together , selected according
to taste .
perhaps , the default could be selected with the "install" script .
perhaps , it could be specified in "rc.conf" or some_such .
using the present sym_link method , the selected_default would determine
which is the "real" name and which is the "sym_link" name , in "/dev" .
different people look at the world in different ways .
i call this "freedom of choice" ; i hope that you do , also .
rob
More information about the freebsd-questions
mailing list