LinuxでUBS HDDを接続すると、起動するたびにデバイス名が変わるのを防ぐ方法

社内サーバーや開発サーバーなど、ローカル環境でLinuxサーバーを運用していると、バックアップ用のストレージやファイル領域の確保などで外付けUSBハードディスクを接続する場合が出てきます。

しかも複数台のHDDを接続した場合、Linuxを再起動するとHDDのデバイス名が入れ替わったりする事があります。

/etc/fstab に記述してもマウント先が入れ替わってしまったり、して運用に少々手間がかかってしまいます。

何か良い解決方法はないのでしょうか。

 

LinuxシステムでUSB HDDを複数接続すると、再起動するたびにデバイス名(例:/dev/sda、/dev/sdbなど)が変わる理由は、Linuxカーネルがデバイスを検出する順序が再起動ごとに変わる可能性があるからです。デバイス名は、検出された順にカーネルによって動的に割り当てられます。そのため、同じデバイスが異なるデバイス名を持つことがあります。

これを回避するためには、以下の方法を使用してデバイスを一意に識別することが推奨されます:

  1. UUID(Universally Unique Identifier)を使用する: UUIDは、各ファイルシステムに対して一意に生成される識別子です。blkidコマンドを使用してデバイスのUUIDを確認できます。
    blkid

    fstabファイル(/etc/fstab)でUUIDを使用してデバイスをマウントします。

    UUID=your-uuid-here /mnt/your-mount-point ext4 defaults 0 2
  2. ラベル(LABEL)を使用する: ラベルはファイルシステムに割り当てられた名前です。ラベルを設定するためにe2label(ext2/3/4の場合)やtune2fsコマンドを使用します。
    e2label /dev/sdX1 your-label
    

    その後、fstabでラベルを使用してマウントポイントを設定します。

    LABEL=your-label /mnt/your-mount-point ext4 defaults 0 2
  3. udevルールを使用する: 特定のデバイスに対して固定の名前を与えるためにudevルールを作成します。例えば、/etc/udev/rules.d/99-usb-disks.rulesというファイルを作成し、次のように記述します。
    SUBSYSTEM=="block", ATTRS{serial}=="your-serial-number", SYMLINK+="your-fixed-name"

    serial番号はudevadm info --query=all --name=/dev/sdXコマンドで確認できます。

これらの方法を使うことで、再起動後もUSB HDDのデバイス名が変わらずに済むようになります。