Happy Elements 株式会社 カカリアスタジオ Advent Calendar 2016 の 3 日目です.本日の担当はインフラグループの @nagizero です.よろしくお願いします.
顛末
弊社は先日オフィスを移転しました.その際,社内用のサーバは電源を落として旧オフィスから新オフィスに移動させたのですが,新オフィスで電源を入れるとサーバの 1 台が HDD をマウントできなくなっていました.
当該サーバではデバイス名 (e.g. /dev/sda1) を指定して HDD をマウントしていたのですが, HDD のデバイス名が変化していたために正常にマウントすることができなくなっていました.どうやらオフィス移転時の電源断がきっかけでデバイス名が変化してしまったようです.
新たにデバイス名を指定してマウントしてもよいのですが,再度デバイス名が変更されてマウントできなくなっても困ります.そこで,変化しうるデバイス名ではなく,不変の UUID を指定してマウントすることにしました.
以下,トラブルの調査から対応までの作業内容を記載します.
調査
HDD がマウントできなくなった原因を探るため,まず fstab を確認しました.
/dev/sdb1 /mnt/usbhdd vfat defaults,umask=000 0 0
/dev/sdc1 /mnt/usbhdd2 ext4 acl,usrquota 0 0
fstab に従い sdb1 を vfat としてマウントしようとしましたが上手くいきません.どうやらファイルシステムが異なるようです.
# mount -t vfat /dev/sdb1 /mnt/usbhdd
mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
# dmesg | tail
[ 1357.548915] FAT-fs (sdb1): utf8 is not a recommended IO charset for FAT filesystems, filesystem will be case sensitive!
[ 1357.549375] FAT-fs (sdb1): bogus number of reserved sectors
[ 1357.549497] FAT-fs (sdb1): Can't find a valid FAT filesystem
次に,サーバが認識しているデバイスのファイルシステムを確認しました.
# parted -l
Model: BUFFALO HD-WLU3/R1 1 (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 2000GB 2000GB primary ext4
Model: BUFFALO HD-WLU3/R1 1 (scsi)
Disk /dev/sdc: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 32.8kB 2000GB 2000GB primary fat32 lba
sdb が ext4 で, sdc が fat32 と表示されています.これは fstab に記載されているファイルシステムと逆ですから, sdb と sdc のデバイス名が入れ替わってしまったと考えられます.
試しに parted -l
の結果通りのファイルシステムを指定してマウントすると上手くいきました.やはりデバイス名が入れ替わっていたようです.
対応
fstab にデバイスと正しいファイルシステムの組み合わせを記述するため,デバイスの UUID を調べます.
# blkid /dev/sdb1
/dev/sdb1: UUID="c65bba6a-4ebe-4fc1-aa2c-f6c3ddf99110" TYPE="ext4"
# blkid /dev/sdc1
/dev/sdc1: LABEL="HD-WLU3" UUID="057E-79CD" TYPE="vfat"
UUID が確認できたので fstab を書き換えます.
- /dev/sdb1 /mnt/usbhdd vfat defaults,umask=000 0 0
+ UUID=c65bba6a-4ebe-4fc1-aa2c-f6c3ddf99110 /mnt/usbhdd2 ext4 acl,usrquota 0 0
- /dev/sdc1 /mnt/usbhdd2 ext4 acl,usrquota 0 0
+ UUID=057E-79CD /mnt/usbhdd vfat defaults,umask=000 0 0
マウントし直して完了です.
# mount -a
以上でデバイス名が変化しても問題なく HDD をマウントできるようになりました.