USB接続の外付けHDDではまる
LABEL=USBHDD /mnt/usbhdd ext4 defaults,noatime,nodiratime,noauto 0 0
となっていたのを、これでは起動時に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使ってオートマウントする
/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で対応することにした。