Monter automatiquement une partition lors de l'insertion dans la raspberry d'une clef usb !
Salut à tous.
Je fais ce test avec ma Raspberry Pi 3+, sous raspbian.
Je désire, à chaque fois que j'insère ma clef usb dans la raspberry, que le montage des partitions "/boot" et "/rootfs" se fassent automatiquement.
C'est bien plus pratique que de le faire manuellement à chaque fois.
Voici les caractéristiques de ma clef usb :
Code:
1 2 3 4 5 6 7 8
| /etc/udev/rules.d> lsusb
Bus 001 Device 004: ID 0bc2:61b3 Seagate RSS LLC
Bus 001 Device 012: ID 18a5:0302 Verbatim, Ltd Flash Drive
Bus 001 Device 005: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
/etc/udev/rules.d> |
La ligne qui nous concerne est la deuxième : "Verbatim, Ltd Flash Drive".
Après l'insertion de la clef usb dans la raspberry, voici ce que j'obtiens :
Code:
1 2 3 4 5 6
| /etc/udev/rules.d> blkid
/dev/sda1: LABEL="boot" UUID="13C6-2676" TYPE="vfat" PARTUUID="9cba179a-01"
/dev/sda2: UUID="037616fd-28fe-4652-8248-2042ea30b929" TYPE="ext4" PARTUUID="9cba179a-02"
/dev/sdb1: LABEL="boot" UUID="D332-A79C" TYPE="vfat" PARTUUID="12345678-01"
/dev/sdb2: LABEL="rootfs" UUID="31688870-9e02-4182-8cda-25195c5a4739" TYPE="ext4" PARTUUID="12345678-02"
/etc/udev/rules.d> |
Il s'agit des périphériques "/dev/sdb1" et "/dev/sdb2". Ce sont ses périphériques sur lesquelles je travaille.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| /etc/udev/rules.d> df
Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur
/dev/root 16453544 4913708 10813268 32% /
devtmpfs 470112 0 470112 0% /dev
tmpfs 474720 0 474720 0% /dev/shm
tmpfs 474720 12620 462100 3% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 474720 0 474720 0% /sys/fs/cgroup
tmpfs 10240 12 10228 1% /tmp
tmpfs 10240 296 9944 3% /var/log
tmpfs 10240 0 10240 0% /var/tmp
/dev/sda1 42137 22499 19638 54% /boot
tmpfs 94944 0 94944 0% /run/user/1000
tmpfs 94944 0 94944 0% /run/user/0
tmpfs 94944 0 94944 0% /run/user/109
/etc/udev/rules.d> |
Comme on le constate, ils n'ont pas été montés.
Voici la règle que j'ai ajouté : "10-my-usb-key.rules".
Code:
1 2 3 4 5 6 7 8
| /etc/udev/rules.d> la
total 20
drwxr-xr-x 2 root root 4096 sept. 19 00:04 .
drwxr-xr-x 4 root root 4096 sept. 17 13:22 ..
-rw-r--r-- 1 root root 733 sept. 19 00:04 10-my-usb-key.rules
-rw-r--r-- 1 root root 328 août 30 13:31 72-static-name.rules
-rw-r--r-- 1 root root 1028 nov. 27 2017 99-com.rules
/etc/udev/rules.d> |
Et voici son contenu :
Code:
1 2 3 4 5 6 7 8 9 10 11
| #
# Mount the device
#
KERNEL=="sd[b-z]2",SUBSYSTEM=="block",ATTRS{idVendor}=="18a5",ATTRS{idProduct}=="0302",ACTION=="add",\
RUN+="/bin/mount -t auto -o defaults,user,noexec /dev/%k /mnt/rootfs",SYMLINK+="my_usb_key_2"
#
# Clean up after removal
#
KERNEL=="sd[b-z]2",SUBSYSTEM=="block",ATTRS{idVendor}=="18a5",ATTRS{idProduct}=="0302",ACTION=="remove",\
RUN+="/bin/umount -l /dev/%k"
~ |
J'indique ici que la seconde règle, celle du montage de la partition "rootfs".
A priori, je pense que j'ai correctement inséré les bons paramètres.
A tout hasard, voici le compte-rendu de ce périphérique :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272
| /etc/udev/rules.d> udevadm info -a /dev/sdb2
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0/block/sdb/sdb2':
KERNEL=="sdb2"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{inflight}==" 0 0"
ATTR{partition}=="2"
ATTR{ro}=="0"
ATTR{size}=="16777216"
ATTR{start}=="98304"
ATTR{stat}==" 187 87 13220 4350 3 0 24 770 0 4280 5120"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0/block/sdb':
KERNELS=="sdb"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{alignment_offset}=="0"
ATTRS{capability}=="51"
ATTRS{discard_alignment}=="0"
ATTRS{events}=="media_change"
ATTRS{events_async}==""
ATTRS{events_poll_msecs}=="-1"
ATTRS{ext_range}=="256"
ATTRS{inflight}==" 0 0"
ATTRS{range}=="16"
ATTRS{removable}=="1"
ATTRS{ro}=="0"
ATTRS{size}=="120918016"
ATTRS{stat}==" 354 100 18246 9740 3 0 24 770 0 6580 10510"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0':
KERNELS=="1:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{device_busy}=="0"
ATTRS{eh_timeout}=="10"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_media_change}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{inquiry}==""
ATTRS{iocounterbits}=="32"
ATTRS{iodone_cnt}=="0x52e"
ATTRS{ioerr_cnt}=="0x2"
ATTRS{iorequest_cnt}=="0x52e"
ATTRS{max_sectors}=="240"
ATTRS{model}=="STORE N GO "
ATTRS{queue_depth}=="1"
ATTRS{queue_type}=="none"
ATTRS{rev}=="5.00"
ATTRS{scsi_level}=="5"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{type}=="0"
ATTRS{vendor}=="Verbatim"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0':
KERNELS=="target1:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1':
KERNELS=="host1"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0':
KERNELS=="1-1.1.2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2':
KERNELS=="1-1.1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="200mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="12"
ATTRS{devpath}=="1.1.2"
ATTRS{devspec}==" (null)"
ATTRS{idProduct}=="0302"
ATTRS{idVendor}=="18a5"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Verbatim"
ATTRS{maxchild}=="0"
ATTRS{product}=="STORE N GO"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{serial}=="07013A109B3D5264"
ATTRS{speed}=="480"
ATTRS{urbnum}=="4361"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1':
KERNELS=="1-1.1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="2mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0bb3"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="3"
ATTRS{devpath}=="1.1"
ATTRS{idProduct}=="2514"
ATTRS{idVendor}=="0424"
ATTRS{ltm_capable}=="no"
ATTRS{maxchild}=="3"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="fixed"
ATTRS{speed}=="480"
ATTRS{urbnum}=="190"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="2mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0bb3"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{idProduct}=="2514"
ATTRS{idVendor}=="0424"
ATTRS{ltm_capable}=="no"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{speed}=="480"
ATTRS{urbnum}=="49"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{authorized_default}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="0mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0414"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{idProduct}=="0002"
ATTRS{idVendor}=="1d6b"
ATTRS{interface_authorized_default}=="1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 4.14.69-v7+ dwc_otg_hcd"
ATTRS{maxchild}=="1"
ATTRS{product}=="DWC OTG Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="3f980000.usb"
ATTRS{speed}=="480"
ATTRS{urbnum}=="31"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb':
KERNELS=="3f980000.usb"
SUBSYSTEMS=="platform"
DRIVERS=="dwc_otg"
ATTRS{busconnected}=="Bus Connected = 0x1"
ATTRS{buspower}=="Bus Power = 0x1"
ATTRS{bussuspend}=="Bus Suspend = 0x0"
ATTRS{devspeed}=="Device Speed = 0x0"
ATTRS{driver_override}=="(null)"
ATTRS{enumspeed}=="Device Enumeration Speed = 0x1"
ATTRS{fr_interval}=="Frame Interval = 0x1d4b"
ATTRS{ggpio}=="GGPIO = 0x00000000"
ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306"
ATTRS{gotgctl}=="GOTGCTL = 0x001c0000"
ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000"
ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306"
ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a"
ATTRS{guid}=="GUID = 0x2708a000"
ATTRS{gusbcfg}=="GUSBCFG = 0x20001700"
ATTRS{hcd_frrem}=="HCD Dump Frame Remaining"
ATTRS{hcddump}=="HCD Dump"
ATTRS{hnp}=="HstNegScs = 0x0"
ATTRS{hnpcapable}=="HNPCapable = 0x1"
ATTRS{hprt0}=="HPRT0 = 0x00001005"
ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406"
ATTRS{hsic_connect}=="HSIC Connect = 0x1"
ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0"
ATTRS{mode}=="Mode = 0x1"
ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0"
ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 870 msecs (87 jiffies)"
ATTRS{regdump}=="Register Dump"
ATTRS{regoffset}=="0xffffffff"
ATTRS{regvalue}=="invalid offset"
ATTRS{rem_wakeup_pwrdn}==""
ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0"
ATTRS{spramdump}=="SPRAM Dump"
ATTRS{srp}=="SesReqScs = 0x0"
ATTRS{srpcapable}=="SRPCapable = 0x1"
ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 300 msecs (30 jiffies)"
looking at parent device '/devices/platform/soc':
KERNELS=="soc"
SUBSYSTEMS=="platform"
DRIVERS==""
ATTRS{driver_override}=="(null)"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
/etc/udev/rules.d> |
Et voici le lien symbolique :
Code:
1 2 3 4 5
| crw------- 1 root root 10, 59 sept. 18 23:04 memory_bandwidth
drwxrwxrwt 2 root root 40 janv. 1 1970 mqueue
lrwxrwxrwx 1 root root 4 sept. 19 00:01 my_usb_key_2 -> sdb2
drwxr-xr-x 2 root root 60 sept. 18 23:04 net
crw------- 1 root root 10, 61 sept. 18 23:04 network_latency |
Comme on peut le constater, le lien symbolique 'my_usb_key' s'affiche correctement.
Afin de vérifier si le lien fonctionne correctement, j'ai monté la partition et j'ai bien obtenu son contenu.
Tout à l'air de fonctionner, sauf le montage de la partition "rootfs".
J'ai fait des tas de tests, même en remplaçant la commande "mount" par un programme "test.sh", qui ne se déclenche pas.
Qu'est-ce que j'ai mal fait ?
@+