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


24

ディスクパーティションにラベルを添付するe2label and friendsプログラムについて知っています。

e2label /dev/sda1 bla

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

それは可能ですか?

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

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

EDIT3:GPTパーティションにはpartlabelもあり、partedなどで設定できます。/server//q/681088/76442を参照してください


1
これは、あなたが最も適切な人の一人であり、コンセプトを正しく理解しているので、素晴らしい質問です。ラベルの主な目的は、次回の再起動後にドライブの列挙が異なる場合でも、パーティションを一意に識別することです。ただし、ドライブの順序が変更される場合がありますが、ドライブ上のパーティションは固定されたままです。そのため、ドライブではなくパーティションにUUID /ラベルを付ける方が適切です。これは、パーティションがUUID / 1、UUID / 2などの名前になることを意味します。パーティションにラベルを追加しても何も問題はありませんが、デフォルトのケースでは、パーティションごとではなくドライブごとにUUIDを使用する必要があります。
パトリックヘッカー

感謝しますが、私が本当に最初の一人であることを疑います。この問題はすでに長い間私を悩ませてきました。
ダムゼウチ2013年

1
ディスクをMSDOSまたはUNIXではなくGUIDパーティションテーブル(GPT)としてフォーマットする場合(gnu partedを使用)。ドライブにはuuidがあり、パーティションにはuuidがあり、ext2 / 3/4ドライブには独自のuuidがあります。通常、/ dev / disk / by-uuidを使用してドライブを検索し、/ dev / disk / by-partuuidを使用してパーティションを検索できます
-Rahly

回答:


9

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

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

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リストには、各ドライブのブランド番号とモデル番号、およびシリアル番号が含まれています。これらはすべて、SATAポートまたはLSI SAS-2008コントローラーのSASポートに差し込まれたSATAドライブです。

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


これは私の実際の問題に対する最善の解決策だと思いますが、質問に答えていないため、これを答えとして受け入れることはできません。おそらく良い考えではない質問を修正しない限り。ありがとう。
ダムゼフ

あなたはそれが質問に直接答えなかったと言ったように、問題ありません。しかし、それは有用であり、他の誰かが将来それを役に立つと願っています。ところで、ここにエイリアスの改良版があります:alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'。USBディスクも検出し、出力から余分なデータを取り除きます。
cas

7

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

udevルールの作成

注意

slmの回答のおかげで、このソリューションでは、ラベルがHDDベイに固有であり、その中のディスクではないことに注意してください。あなたは、ラベルを使用している場合このように、/dev/bay1そして/dev/bay2、あなたはベイ2のベイ1およびハードディスクBのハード・ディスク・Aを持って、その後、/dev/bay1ディスクAを参照して/dev/bay2、何らかの理由で、あなたはAとBのディスクを交換し、ディスクB.た場合を指し、あなたが取得し/dev/bay1たディスクBを参照すると/dev/bay2、あなたの質問からディスクAを参照して、私はこれがあなたの意図であると信じています。私が間違っている場合は修正してください。


1
このようなマッチングには、モデル番号とシリアル番号を使用することをお勧めします。slmで言及されている警告がまだありますが、システムまたはシステム内の他のディスクに何が起こっても、ディスクの「ラベル」の一貫性が保たれます。
CVn

より良いのは、保証された一意のWWNを好むことです。この回答をご覧ください。
トム・ヘイル

6

パーティションをe2labelするのではなく、ファイルシステムをe2labelします。これらのファイルシステムは、ファイルのパーティション、ディスク全体、ネットワークブロックデバイスに配置できますが、問題ではありません。

はい、ext2 / 3/4ファイルシステムが直接オン/dev/sdaになっている場合は、オンになるものと同じラベルを付けることができます/dev/sda1

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

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


3

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

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

システムに依存するセットアップについての良い点。質問から、私はOPがそれに気づいていると思います:彼らは実際のハードドライブではなくHDDベイにラベルを付けたいと思っています。念のため、回答にメモとして追加しています。
ジョセフR.

@MarcoしかしはblkidOPがに興味を持っているものではないだけで、リストパーティションではないデバイスに思える。
ジョセフ・R.

いいえ、実際にはベイではなくディスクにラベルを付けたかったのです。しかし、私はこのオプションを検討します。
ダムゼウ

ディスクにラベルを付けること可能です、Linux自体がこれを/dev/disk/by-id行いudevこの回答に示すようにスタイルを設定できます。
トム・ヘイル

@TomHale-あなたは私のポイントを逃しています。そのラベルはHDD自体に適用されるのではなく、Linuxシステム内で維持されます。そのHDDをシステムから取り外すと、HDDがマウントされる他のシステムではラベルが使用できなくなります。システムに依存するため、私のアドバイスは正しいです。DVを逆にしてください。
slm

3

私の主な目標は、物理ディスクを明確に識別することだと思います。残念ながら、ファイルシステムにラベルを付けるのと同じ方法でディスクにラベルを付ける標準的な方法はないと思います。

1つの方法は、ディスクのモデルとシリアル番号を使用することです。Linuxでは、これらの識別子をで取得できますhdparm -i /dev/sdX。シリアル番号の良いところは、製造元のステッカーに既に印刷されている可能性があることです。(あなたがe2labelあなたの質問で言及したので、あなたはほとんどLinuxを気にしていると思います。もしそうなら、あなたの質問を編集してタグを追加して。)

ハードウェアRAIDコントローラーを使用hdparmしている場合、うまくいかない場合があります。その場合は、代わりにRAIDコントローラーのコマンドラインツールを調べる必要があります。

ディスクの内容で何かを識別する場合は、GPTパーティションテーブルヘッダー(LBA 1のバイト56〜71)に格納されているディスクGUIDを使用できます。選択したラベルではなく、任意のランダムな文字列ですが、パーティションテーブルを上書きすることを決定するまでは永続的であるという点で、ラベルのようなものです。Linuxでは、を使用してディスクGUIDを表示できますgdisk -l /dev/sdX


1

私が得た答えに基づいて(みんなありがとう!)実際にディスクにラベルを付ける方法はないようですが、パーティションにしかできません。したがって、答えはおそらく「NO」です。

@casと@ 200_successによって提案された提案に進みます。ベイのドアにステッカーでディスクのシリアル番号を貼り付けます。

(@Stephane Chazelasが提案するように)このパーティションにラベルを付けるためだけに各ディスクに小さなパーティションを作成することもオプションですが、後でシステムを維持する必要がある他の人にとってはあまりにも混乱を招くと思います。


1

udevディスクの保証された一意のWWN(ある場合)を使用してルールを作成します。それ以外の場合は、ベンダーIDとシリアルIDを組み合わせて使用​​します。

  1. 必要な値を取得します。

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. これらの値を次の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"
    
  3. udevadm trigger

で指定された値を使用してシンボリックリンクに自動的に名前を付けるにはudevadm info -q all /dev/<YOUR-DEVICE>、次を使用できます。

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

値からENV変数を作成ATTRSして、おそらくより短い一意のIDを取得することもできます。


0

あなたがls /dev/disk-by-path/pci*...

各ドライブベイのPCIパスが必ず表示されます。ラベルを正しく取得するには、既知のディスクを1つ使用するだけです。

blkid /dev/disk-by-path/pci*どのディスクパーティションがPCIパス上にあるかを確認するために使用します。

そのパスを使用してマウントすることもできます。


0

私は@casソリューションが好きですが、ここに私の2¢があります

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

-1

ディスクが既にとしてラベル付けされsdasdbsdc...パーティションは、その後に例えばラベル付けされていますsdasda1sda2...

以下を使用して、ディスクとパーティションのすべてのラベルをリストできます。 ls /dev/sd*


4
残念ながら、ディスクをあるコンピューターから別のコンピューターに、またはあるコントローラーから別のコントローラーに移動すると、これらのデバイス名が変わります。
ダムゼフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.