ラベルをディスクパーティションに添付するためのe2labelおよびfriendsプログラムについて知っています。
e2label /dev/sda1 bla
私がしたいことは何か違う:パーティションではなく/ dev/sda用のハードドライブ用のラベルを作成したい。
それは可能ですか?はいの場合、どのように?
編集:背景:複数のHDベイがある場合、物理的なベイのドアに(紙の)ラベルを付け、そこに挿入したディスクに同じラベルを論理的に付けたいです。
EDIT2:これはUbuntu Linux 12.04サーバーに関するものです。
EDIT3:GPTパーティションには、partlabelもあります。これは、たとえば、別れた。参照 https://serverfault.com/q/681088/76442
最初の質問には良い回答がいくつかあるので、ディスクのラベル付けという質問の背景に焦点を当てます。
ドライブのシリアル番号を使用して、ホットスワップベイのラベルを印刷します。これは、ドライブを一意かつ一貫して識別するための最良の方法です。どのベイ、またはどのコントローラーに接続されているかに関係なく、変更されません。
Linuxを使用しているのか、他のUnixを使用しているのかは明言していませんが、Linuxの場合は、/ dev/disk/by-id /ディレクトリ。次のbashエイリアスがこれに役立ちます。
alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'
(scsi-*
に一致すると、SATAおよびSASドライブを含むすべての「SCSIライク」ドライブが見つかります。SATAドライブのみのシステムでは、ata-*
も機能します)
例えば私のZFSサーバーシステムの1つでは、次のような出力が生成されます。
#list_disks | sort sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141 sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122 sdd scsi-SATA_ST3_ [AS_AS__AS_AS__AS_AS_AS__AS_AS__AS_AS__AS__AS__AS__AS_AS__AS__AS__AS__AS__AS__AS__AS__AS__AS ________________________ sdf scsi-SATA_ST31000528AS_9VP509T5 sdg scsi-SATA_ST31000528AS_9VP4RPXK sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8 sdi scsi-ECR_SOC_V_SOC_V_SOC_V_SOC_V_SOC_V_SOC_V_SOC_V_SOC_V_S_SOC_S_XS_V_S_SOC_S_XS_V_S_X_S_X_S_X_S_X_S_OC_S_X_S_X_X_S_X_X_S_X_S_X_S_X_S_X_X_S_X_X_S_X_S_X_S_X_XS ____。] sdk scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036
ご覧のとおり、/ dev/disk/by-idのリストには、各ドライブのブランドとモデル番号、およびシリアル番号が含まれています。これらはすべて、SATAポートまたはLSI SAS-2008コントローラのSASポートに接続されているSATAドライブです。
ラベルプリンターを接続していた場合、list_disks
の出力に基づいてラベルを印刷するのは簡単です。代わりに、私は古い手動ラベルライターを使用しました。印刷されたラベルには、ブランド/モデルのないシリアル番号のみが含まれています(必要なときにドライブを識別するのに十分です)。ラベルは、ドライブが故障し、交換する必要がある場合に非常に便利です。
これがLinuxの場合は、udev
を使用してデバイスへのシンボリックリンクを作成することで、やりたいことを実現できると思います。 /etc/udev/rules.d
を見ると、70-persistent-cd.rules
というファイルがあり、その内容には次のような行があります。
SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"
これにより、PCIバスアドレスで識別されるデバイスへのシンボリックリンク/dev/cdrom
が作成されます。 HDDを(ベイ番号?そこには経験がないので)使用して特定し、上記と同様の構文を使用して/dev/bay1
などのシンボリックリンクを追加することで、目的を達成できるはずです。 udev
ルールの記述に関する次の記事が役立つ場合があります。
注
Slmの回答のおかげで、このソリューションはラベルを、その内部のディスクではなくHDDベイに固有にすることに注意してください。したがって、/dev/bay1
と/dev/bay2
というラベルを使用し、ベイ1にハードディスクAがあり、ベイ2にハードディスクBがある場合、/dev/bay1
はディスクAを指し、/dev/bay2
はディスクBを指します。何らかの理由で、AディスクBの場合、ディスクBを参照する/dev/bay1
とディスクAを参照する/dev/bay2
を取得します。あなたの質問から、これはあなたの意図だと思います。私が間違っていたら訂正してください。
パーティションをe2labelするのではなく、ファイルシステムをe2labelします。これらのファイルシステムは、ファイルのパーティション上、ディスク全体、ネットワークブロックデバイス上に配置できます。問題ではありません。
したがって、そうです。ext2/ 3/4ファイルシステムが/dev/sda
に直接ある場合、/dev/sda1
にあるのと同じようにラベルを付けることができます。
ここで、/dev/sda
に直接ファイルシステムがない場合、たとえば/dev/sda
が(GPT、MBR、LVM ...を使用して)いくつかのパーティションに分割されている場合、e2label /dev/sda
を使用することはできません。
GPTパーティショニングでは、パーティションに名前を付けることができるため、ディスクの識別に役立つ名前を持つ1セクターの大きなパーティションを作成できます。これは、c
のgdisk
コマンドで実行できます。
パーティションではなくディスクにラベルを付けることが可能かどうかの質問に答えるには、答えはノーです。私はそのための方法を知りません。
@JosephRで概説されている方法を使用できますが、このセットアップはシステムに依存するため、そのHDDを別のシステムに持っていくと、提案された「ラベル付け」が失われます。意味のある方法でディスクに関連付けられていません。
ちなみに、blkid
コマンドを使用すると、さまざまなドライブに設定されたラベルとUUIDを確認できます。
$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs"
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs"
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs"
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4"
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member"
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap"
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4"
あなたの主な目標は、物理ディスクを明確に識別することだと思います。残念ながら、ファイルシステムにラベルを付けるのと同じ方法でディスクにラベルを付ける標準の方法があるとは思いません。
1つの方法は、ディスクのモデルとシリアル番号を使用することです。 Linuxでは、hdparm -i /dev/sdX
を使用してこれらの識別子を取得できます。シリアル番号のいいところは、製造元のステッカーにすでに印刷されている可能性があることです。 (あなたが質問でe2label
を述べたので、ほとんどLinuxに関心があると思います。もしそうなら、質問を編集して linux タグを追加してください。)
ハードウェアRAIDコントローラーを使用している場合、hdparm
が機能しない可能性があります。その場合は、代わりにRAIDコントローラーのコマンドラインツールを調べる必要があります。
ディスクの内容の何かでそれを識別したい場合は、GPTパーティションテーブルヘッダー( LBA 1のバイト56-71 )に格納されているディスクGUIDを使用できます。これは選択したラベルではなく任意のランダムな文字列ですが、パーティションテーブルを上書きすることを決定するまで永続的であるという点でラベルに似ています。 Linuxでは、ディスクGUIDを使用してgdisk -l /dev/sdX
を表示します。
私が得た答えに基づいて(みんなありがとう!)実際にディスクにラベルを付ける方法はなく、パーティションだけに見えるようです。したがって、答えはおそらく「いいえ」です。
@casと@ 200_successによって提案された提案に従います。ベイのドアにステッカーでディスクのシリアル番号を貼り付けます。
(@Stephane Chazelasによって示唆されているように)このパーティションにラベルを付けることができるように、各ディスクに小さなパーティションを作成することもオプションですが、後でシステムを保守しなければならない可能性がある他の人にとっては、混乱しすぎると思います。
ディスクの保証された一意の [〜#〜] wwn [〜#〜] (ある場合)を使用してudev
ルールを作成します。それ以外の場合は、組み合わせたベンダーIDとシリアルIDを使用します。
必要な値を取得します。
udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
これらの値をudev
rules
にマッサージします。
ENV{DEVTYPE}=="disk", ENV{ID_WWN}=="0x5000c1cd31d48c87", SYMLINK+="4TBseagate"
ENV{DEVTYPE}=="disk", ENV{ID_VENDOR_ID}=="0781", ENV{ID_SERIAL}=="SanDisk_Cruzer_Blade_4C530263101009 121490-0:0", SYMLINK+="8GBsandisk"
udevadm trigger
udevadm info -q all /dev/<YOUR-DEVICE>
で指定された値を使用してシンボリックリンクに自動的に名前を付けるには、次のように使用できます。
SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"
ENV
値からATTRS
変数を作成して、より短い一意のIDを取得することもできます。
もし、あんたが ls /dev/disk-by-path/pci*
...
各ドライブベイのPCIパスが必ず表示されます。ラベルを正しく取得するには、既知のディスクを1つ使用するだけです。
使用する blkid /dev/disk-by-path/pci*
to PCIパス上にあるディスクパーティションを確認します。
そのパスを使用してマウントすることもできます。
空のディスクの可能性があります:-Lオプションを使用して、ディスク全体をbtrfsモードでフォーマットします。
mkfs.btrfs -L MYLABEL /dev/sdz
次に、パーティションテーブルを再作成します...
@casソリューションが好きですが、ここに私の2 myがあります
for i in /dev/sd?
do
echo "$i"
/usr/sbin/smartctl -a "$i" | grep Serial
/usr/sbin/smartctl -a "$i" | grep "Device Model"
echo
done