USB接続の外付けHDDではまる
コンテンツ
e>
となっていたのを、これでは起動時にfsckが走らないではないか、ということで
LABEL=USBHDD /mnt/usbhdd ext4 defaults,noatime,nodiratime,noauto 0 5
とした。そしたら起動しなくなった(^o^)/。 原因はおそらく、fsckかける段階ではまだ、USB接続のHDDをうまく扱えないから(モジュールとかの関係だと思われる)。 っていうかオプションにnoautoしてる時点でそれに気づくべきだった。 /etc/rc.localに
(sleep 10 && /bin/mount /mnt/usbhdd) &
とあって、気持的にはautoだった。 完全に忘れていた。
initramfs に usb のモジュール読み込むように設定すればよい?
/etc/mkinitcpio.confのHOOKにusbを追加してみた。
HOOKS="base udev autodetect sata filesystems usb keymap usbinput"
その後
% sudo mkinitcpio -p kernel26
として、initramfs再構築。再起動してみた。 fallbackのイメージならマウントできた。 通常のautodetect入りのイメージではマウントできず(デバイスが存在しないと怒られる)。 おそらく、何かのモジュールが読み込まれていない? 原因不明。
udev使ってオートマウントする
udev – ArchWiki /etc/udev/rules/11-media-auto-mount.rules
KERNEL!="sd[b-z]*", GOTO="media_auto_mount_end" ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_auto_mount_end" # Global mount options ACTION=="add", ENV{mount_options}="noatime,nodiratime,users" # Filesystem specific options ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="vfat|ntfs", ENV{mount_options}="%E{mount_options},utf8,gid=100,umask=002" # Get label ACTION=="add", PROGRAM=="/sbin/blkid -o value -s LABEL %E{device}", ENV{dir_name}="%c" # use basename to correctly handle labels such as ../mnt/foo ACTION=="add", PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c" ACTION=="add", ENV{dir_name}!="?*", ENV{dir_name}="usb-%k" ACTION=="add", ENV{dir_name}=="?*", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%k '/media/%E{dir_name}'" ACTION=="remove", ENV{dir_name}=="?*", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'" LABEL="media_auto_mount_end"
udevの文法は好きになれない。 これで万事OKかと思いきや、うまくLABELを取得できない。 もう、面倒なので結局、はじめの/etc/rc.localで対応することにした。