パーティションではなくディスクデバイスにラベルを付けることはできますか?

パーティションではなくディスクデバイスにラベルを付けることはできますか?

私はディスクパーティションにラベルを付けるe2labelとその仲間のプログラムについて知っています。

e2label /dev/sda1 bla

私がやりたいことは別のことです。パーティションではなく、/dev/sda のハード ドライブのラベルを作成したいのです。

それは可能ですか?もし可能であれば、どのようにすればいいですか?

編集: 背景: 複数の HD ベイがあるケースでは、物理ベイのドアに (紙の) ラベルを貼り、そこに入れたディスクに論理的に同じラベルを貼りたいと思っています。

編集2: これはUbuntu Linux 12.04 サーバーに関するものです。

編集3: GPTパーティションにはpartlabelもあり、これは例えばpartedで設定できます。https://serverfault.com/q/681088/76442

答え1

最初の質問にはすでにいくつかの良い回答がありますので、質問の背景であるディスクのラベル付けに焦点を当てます。

ホットスワップ ベイのラベルを印刷するには、ドライブのシリアル番号を使用します。これは、ドライブを一意かつ一貫して識別する最良の方法です。どのベイやどのコントローラーに接続しても、シリアル番号は変わりません。

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 | ソート
sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141
sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122
sdd scsi-SATA_ST31000528AS_9VP4P4LN
sde scsi-SATA_ST31000528AS_6VP3FWAG
sdf scsi-SATA_ST31000528AS_9VP509T5
sdg scsi-SATA_ST31000528AS_9VP4RPXK
sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8
sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R
sdj scsi-SATA_ST31000528AS_9VP18CCV
SDK SCSI-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036

ご覧のとおり、/dev/disk/by-id リストには、各ドライブのブランドとモデル番号、およびシリアル番号が含まれています。これらはすべて、LSI SAS-2008 コントローラーの SATA ポートまたは SAS ポートに接続された SATA ドライブです。

ラベル プリンターが接続されていれば、の出力に基づいてラベルを印刷するのは簡単ですlist_disks。代わりに、手元にあった古い手動ラベル ライターを使用しました。印刷されたラベルには、ブランド/モデルなしでシリアル番号のみが記載されています (必要なときにドライブを識別するにはこれで十分です)。ドライブが故障して交換する必要がある場合、ラベルは非常に便利です。

答え2

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"

これは、/dev/cdromPCI バス アドレスで識別されるデバイスへのシンボリック リンクを作成します。ベイ番号 (申し訳ありませんが、経験はありません) を使用して HDD を識別し、上記と同様の構文を使用して、たとえば のようなシンボリック リンクを追加することで、目的を達成できるはずです。/dev/bay1記述ルールに関する次の記事がudev役立つ場合があります。

udevルールの記述

注記

slm さんの回答のおかげで、このソリューションでは、ラベルが HDD ベイ内のディスクではなく、HDD ベイに固有のものになることに注意してください。したがって、ラベル/dev/bay1と を使用し/dev/bay2、ベイ 1 にハード ディスク A、ベイ 2 にハード ディスク B がある場合、 は/dev/bay1ディスク A を参照し、 はディスク B を参照します。何らかの理由で A ディスクと B ディスクを入れ替えると、 はディスク B を参照し、はディスク A を参照するよう/dev/bay2になります。ご質問から、これがあなたの意図であると私は信じています。間違っていたら訂正してください。/dev/bay1/dev/bay2

答え3

パーティションを e2label するのではなく、ファイル システムを e2label します。これらのファイル システムは、ファイル上のパーティション、ディスク全体、ネットワーク ブロック デバイスなど、どこにあってもかまいません。

したがって、 上に ext2/3/4 ファイルシステムが直接存在する場合は/dev/sda、 上にあるファイルシステムと同じようにラベル付けできます/dev/sda1

さて、 に直接ファイルシステムが存在せ/dev/sdaず、たとえば/dev/sda(GPT、MBR、LVM などを使用して) 複数のパーティションに分割されている場合は、明らかに は使用できませんe2label /dev/sda

GPT パーティションでは、パーティションに名前を付けることができるため、ディスクの識別に役立つ名前を付けた 1 セクターの大きなパーティションを作成できます。これは、 のcコマンドを使用して実行できますgdisk

答え4

パーティションではなくディスクにラベルを付けることが可能かどうかという質問に対する答えは「いいえ」です。私はそれを行う方法を知りません。

@JosephR が概説した方法を使用することもできますが、この設定はシステムに依存しているため、その HDD を別のシステムに持ち込むと、彼が提案した「ラベル付け」は失われます。これは、ディスクに意味のある形で結び付けられていません。

ちなみに、コマンドを使用すると、さまざまなドライブに設定されているラベルと UUID を確認できますblkid

$ 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" 

関連情報