web-dev-qa-db-ja.com

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

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

e2label /dev/sda1 bla

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

それは可能ですか?はいの場合、どのように?

編集:背景:複数のHDベイがある場合、物理的なベイのドアに(紙の)ラベルを付け、そこに挿入したディスクに同じラベルを論理的に付けたいです。

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

EDIT3:GPTパーティションには、partlabelもあります。これは、たとえば、別れた。参照 https://serverfault.com/q/681088/76442

26
dummzeuch

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

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

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

12
cas

これが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ルールの記述に関する次の記事が役立つ場合があります。

devルールの作成

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

7
Joseph R.

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

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

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

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

6

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

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

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

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

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

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

3
200_success

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

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

(@Stephane Chazelasによって示唆されているように)このパーティションにラベルを付けることができるように、各ディスクに小さなパーティションを作成することもオプションですが、後でシステムを保守しなければならない可能性がある他の人にとっては、混乱しすぎると思います。

1
dummzeuch

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

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

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. これらの値をudevrulesにマッサージします。

    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を取得することもできます。

1
Tom Hale

もし、あんたが ls /dev/disk-by-path/pci*...

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

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

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

0
Robert

空のディスクの可能性があります:-Lオプションを使用して、ディスク全体をbtrfsモードでフォーマットします。

mkfs.btrfs -L MYLABEL /dev/sdz

次に、パーティションテーブルを再作成します...

0
pcouderc

@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
0
MERM