「永続的なブロックデバイスの命名」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(リンクを修正)
 
(3人の利用者による、間の21版が非表示)
4行目: 4行目:
 
[[en:Persistent block device naming]]
 
[[en:Persistent block device naming]]
 
[[es:Persistent block device naming]]
 
[[es:Persistent block device naming]]
[[it:Persistent block device naming]]
+
[[fr:Persistent block device naming]]
[[zh-cn:Persistent block device naming]]
+
[[pt:Persistent block device naming]]
  +
[[ru:Persistent block device naming]]
  +
[[zh-hans:Persistent block device naming]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|fstab}}
 
{{Related|fstab}}
11行目: 13行目:
 
{{Related|LVM}}
 
{{Related|LVM}}
 
{{Related articles end}}
 
{{Related articles end}}
この記事ではブロックデバイスに永続的な名前を使う法を説明します。永続的な命名は udev によって可能になったものであり、バスによる命名と比べて複数の利点があります。使用しているマシンに複数の SATA, SCSI, IDE ディスクコントローラが存在する場合、それぞれのデバイスノードが追加される順番は一定しません。そのため、起動するたびに {{ic|/dev/'''sda'''}} や {{ic|/dev/'''sdb'''}} といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。
+
この記事では[[ブロックデバイス]]に永続的な名前を使う法を説明します。永続的な命名は [[udev]] の導入によって可能になったものであり、バスによる命名と比べて複数の利点があります。使用しているマシンに複数の SATASCSIIDE ディスクコントローラが存在する場合、それぞれのデバイスノードが追加される順番は一定しません。そのため、起動するたびに {{ic|/dev/sd'''a'''}} や {{ic|/dev/sd'''b'''}} といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。
  +
 
{{Note|
 
{{Note|
* 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、[[mkinitcpio#init|mkinitcpio]] が命名方法をサポートしていても、systemd が起動時に処理できる命名法には制約が存在することがあります (例: {{Bug|42884}})。
+
* 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、[[mkinitcpio]] が命名方法をサポートしていても、[[systemd]] が起動時に処理できる命名法には制約が存在することがあります (例: {{Bug|42884}})。
  +
* この記事では [[LVM]] の論理ボリュームに言及しません。{{ic|/dev/''VolumeGroupName''/''LogicalVolumeName''}} デバイスパスは永続的であるためです。
* [[LVM|LVM2]] を使用している場合、LVM は自動的にデバイス名を管理するのでこの記事を読む必要はありません。}}
 
  +
}}
  +
  +
== 永続的な命名の方法 ==
  +
  +
永続的な命名には4つの異なる形式があります: [[#by-label|by-label]]、[[#by-uuid|by-uuid]]、[[#by-id と by-path|by-id と by-path]]。[[GUID Partition Table|GUID Partition Table (GPT)]] のディスクを使用する場合、さらに [[#by-partlabel|by-partlabel]] と [[#by-partuuid|by-partuuid]] の形式も利用可能です。また、[[udev#固定デバイス名を設定する|udev による固定デバイス名]]を使うこともできます。
   
  +
{{ic|/dev/disk/}} 内のディレクトリは、デバイスがあるかどうかに応じて動的に作成・破棄されます。
==永続的な命名の方法==
 
   
  +
{{Note|[[ディスクのクローン]]は同じ名前の異なるディスクを作成することに注意してください。}}
永続的な命名には4つの異なる形式があります: [[#by-label|by-label]], [[#by-uuid|by-uuid]], [[#by-id と by-path|by-id と by-path]]。[[GUID Partition Table|GUID Partition Table (GPT)]] のディスクを使用する場合、さらに [[#by-partlabel|by-partlabel]] と [[#by-partuuid|by-partuuid]] の形式も利用可能です。また、[[#Udev によるデバイス名の固定|Udev による固定デバイス名]]を使うこともできます。
 
   
以下のセクションでは4つの異なる命名規則がどのようなものであるか、またどうやって使うのかを説明しています。
+
以下のセクションではこれらの異なる命名規則がどのようなものであるか、またどうやって使うのかを説明しています。
   
{{ic|lsblk -f}} コマンドを使うことで永続的な名前をグラフィカルに表示することができます:
+
[[lsblk]] コマンドを使うことで1つ目の永続的な名前をグラフィカルに表示することができます:
   
{{hc|$ lsblk -f|<nowiki>
+
{{hc|$ lsblk -f|
NAME FSTYPE LABEL UUID MOUNTPOINT
+
NAME FSTYPE LABEL UUID MOUNTPOINT
 
sda
 
sda
├─sda1 vfat CBB6-24F2 /boot
+
├─sda1 vfat CBB6-24F2 /boot
├─sda2 ext4 SYSTEM 0a3407de-014b-458b-b5c1-848e92a327a3 /
+
├─sda2 ext4 Arch Linux 0a3407de-014b-458b-b5c1-848e92a327a3 /
├─sda3 ext4 DATA b411dc99-f0a0-4c87-9e05-184977be8539 /home
+
├─sda3 ext4 Data b411dc99-f0a0-4c87-9e05-184977be8539 /home
└─sda4 swap f9fe0b69-a280-415d-a03a-a32752370dee [SWAP]
+
└─sda4 swap f9fe0b69-a280-415d-a03a-a32752370dee [SWAP]
  +
mmcblk0
</nowiki>}}
 
  +
└─mmcblk0p1 vfat F4CA-5D75
  +
}}
   
[[GPT]] を使っている場合、代わりに {{ic|blkid}} コマンドを使います。{{ic|blkid}} コマンドはスクリプトで処理しやすいように出力しますが、人間が読むは読みづらいかもしれません
+
[[GPT]] を使っている場合、代わりに {{ic|blkid}} コマンドを使います。{{ic|blkid}} コマンドはスクリプトでは使いやすいすが、人間っては読みづらいです
   
{{hc|$ blkid|<nowiki>
+
{{hc|# blkid|2=
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI SYSTEM PARTITION" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af"
+
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af"
/dev/sda2: LABEL="SYSTEM" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/LINUX" PARTUUID="98a81274-10f7-40db-872a-03df048df366"
+
/dev/sda2: LABEL="Arch Linux" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/Linux" PARTUUID="98a81274-10f7-40db-872a-03df048df366"
/dev/sda3: LABEL="DATA" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="HOME" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e"
+
/dev/sda3: LABEL="Data" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="Home" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e"
/dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="SWAP" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b</nowiki>}}
+
/dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="Swap" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b"
  +
/dev/mmcblk0: PTUUID="0003e1e5" PTTYPE="dos"
  +
/dev/mmcblk0p1: UUID="F4CA-5D75" TYPE="vfat" PARTUUID="0003e1e5-01"
  +
}}
   
===by-label===
+
=== by-label ===
   
大抵のファイルシステムラベルを設定することができます。ラベルが存在するパティションは {{ic|/dev/disk/by-label}} ディレクトリに掲載されます。あなたがパーティションにラベルを付加たり取り除いたりすると、このディレクトリが動的に作成・破壊されます。
+
ほぼすべて[[ファイルシステム#ファイルシステムのタイプ|ファイルシステムタイプ]]が、ラベルを持つことができます。ラベルを持つボリュすべて {{ic|/dev/disk/by-label}} ディレクトリ出現します。
   
{{hc|$ ls -l /dev/disk/by-label|<nowiki>total 0
+
{{hc|$ ls -l /dev/disk/by-label|
  +
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 DATA -> ../../sda3
 
lrwxrwxrwx 1 root root 10 May 27 23:31 SYSTEM -> ../../sda2
+
lrwxrwxrwx 1 root root 10 May 27 23:31 Data -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 Arch\x20Linux -> ../../sda2
</nowiki>}}
 
  +
}}
   
ファイルシステムラベルは変更することが可能です。一般的に使われているファイルシステムラベル変更する方法は以下の通りになります:
+
ほとんどのファイルシステムは、ファイルシステム作成時におけるラベルの設定をサポートしています (関連する {{ic|mkfs.*}} ユーティリティの [[man ページ]]を参照してください)。一部のファイルシステムにおいてラベルを変更することきます。以下は、一般的ファイルシステムにおけるラベル変更方法す:
   
; swap : {{ic|swaplabel -L <label> /dev/XXX}} ({{pkg|util-linux}} を使用)
+
; swap : {{ic|swaplabel -L "''new label''" /dev/''XXX''}} ({{pkg|util-linux}} を使用)
; ext2/3/4 : {{ic|e2label /dev/XXX <label>}} ({{pkg|e2fsprogs}} を使用)
+
; ext2/3/4 : {{ic|e2label /dev/''XXX'' "''new label''"}} ({{pkg|e2fsprogs}} を使用)
; btrfs : {{ic|btrfs filesystem label /dev/XXX <label>}} ({{pkg|btrfs-progs}} を使用)
+
; btrfs : {{ic|btrfs filesystem label /dev/''XXX'' "''new label''"}} ({{pkg|btrfs-progs}} を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。)
; reiserfs : {{ic|reiserfstune -l <label> /dev/XXX}} ({{pkg|reiserfsprogs}} を使用)
+
; reiserfs : {{ic|reiserfstune -l "''new label''" /dev/''XXX''}} ({{pkg|reiserfsprogs}} を使用)
; jfs : {{ic|jfs_tune -L <label> /dev/XXX}} ({{pkg|jfsutils}} を使用)
+
; jfs : {{ic|jfs_tune -L "''new label''" /dev/''XXX''}} ({{pkg|jfsutils}} を使用)
; xfs : {{ic|xfs_admin -L <label> /dev/XXX}} ({{pkg|xfsprogs}} を使用)
+
; xfs : {{ic|xfs_admin -L "''new label''" /dev/''XXX''}} ({{pkg|xfsprogs}} を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。)
; fat/vfat : {{ic|dosfslabel /dev/XXX <label>}} ({{pkg|dosfstools}} を使用)
+
; fat/vfat : {{ic|fatlabel /dev/''XXX'' "''new label''"}} ({{pkg|dosfstools}} を使用)
; fat/vfat : {{ic|mlabel -i /dev/XXX ::<label>}} ({{pkg|mtools}} を使用)
+
: {{ic|mlabel -i /dev/''XXX'' ::"''new label''"}} ({{pkg|mtools}} を使用)
; ntfs : {{ic|ntfslabel /dev/XXX <label>}} ({{pkg|ntfs-3g}} を使用)
+
; exfat : {{ic|tune.exfat -L "''new label''" /dev/''XXX''}} ({{Pkg|exfatprogs}} を使用)
  +
: {{ic|exfatlabel /dev/''XXX'' "''new label''"}} ({{Pkg|exfatprogs}} または {{Pkg|exfat-utils}} を使用)
; zfs : このファイルシステムは {{ic|/dev/disk/by-label}} をサポートしていません。ただし [[#by-partlabel]] を使うことはできます。
 
  +
; ntfs : {{ic|ntfslabel /dev/''XXX'' "''new label''"}} ({{pkg|ntfs-3g}} を使用)
  +
; udf : {{ic|udflabel /dev/''XXX'' "''new label''"}} ({{Pkg|udftools}} を使用)
  +
; crypto_LUKS (LUKS2 のみ) : {{ic|1=cryptsetup config --label="''new label''" /dev/''XXX''}} ({{Pkg|cryptsetup}} を使用)
  +
  +
デバイスのラベルは ''lsblk'' を使って得ることができます:
  +
  +
{{hc|$ lsblk -dno LABEL /dev/sda2|
  +
Arch Linux
  +
}}
  +
  +
あるいは ''blkid'' を使って:
  +
  +
{{hc|# blkid -s LABEL -o value /dev/sda2|
  +
Arch Linux
  +
}}
   
 
{{Note|
 
{{Note|
  +
* 衝突を避けるために、ラベルは曖昧であってはいけません。
* root パーティションのファイルシステムラベルを変更する場合、先にパーティションをアンマウントしなければならないので、"ライブ" GNU/Linux ディストリビューションから行う必要があります。
 
  +
* ラベルに設定できるのは16文字までです。
* Labels have to be unambiguous to prevent any possible conflicts.
 
  +
* ラベルはファイルシステムのプロパティであるため、単一の RAID デバイスをアドレス指定するのには適していません。
* Labels can be up to 16 characters long.
 
  +
* [[dm-crypt]] で暗号化済みコンテナを使用する場合、コンテナがロック/暗号化されている間はコンテナ内のファイルシステムのラベルは利用できなくなります。
* Since the label is a property of the filesystem, it is not suitable for addressing a single RAID device persistently.}}
 
  +
}}
   
===by-uuid===
+
=== by-uuid ===
   
  +
[[wikipedia:ja:UUID|UUID]] は、各[[ファイルシステム]]にユニークな識別子を与えるための仕組みです。UUID 識別子は、パーティションをフォーマットするときにファイルシステムユーティリティ (例: {{ic|mkfs.*}}) によって生成されます。UUID 識別子は衝突が起こりにくいように作られています。(スワップや生の暗号化デバイスの LUKS ヘッダを含む) 全ての GNU/Linux ファイルシステムが UUID をサポートします。FAT、exFAT、NTFS ファイルシステムは UUID をサポートしていませんが、それでも、より短い UID (unique identifier) で {{ic|/dev/disk/by-uuid/}} 内に現れます:
[[wikipedia:UUID|UUID]] is a mechanism to give each filesystem a unique identifier. These identifiers are generated by filesystem utilities (e.g. {{ic|mkfs.*}}) when the partition gets formatted and are designed so that collisions are unlikely. All GNU/Linux filesystems (including swap and LUKS headers of raw encrypted devices) support UUID. FAT and NTFS filesystems (''fat'' and ''windows'' labels above) do not support UUID, but are still listed in {{ic|/dev/disk/by-uuid}} with a shorter UID (unique identifier):
 
   
 
{{hc|$ ls -l /dev/disk/by-uuid/|
 
{{hc|$ ls -l /dev/disk/by-uuid/|
79行目: 109行目:
 
lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1
 
lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1
 
lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4
 
lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 F4CA-5D75 -> ../../mmcblk0p1
 
}}
 
}}
   
  +
デバイスの UUID は ''lsblk'' を使って得ることができます:
The advantage of using the UUID method is that it is much less likely that name collisions occur than with labels. Further, it is generated automatically on creation of the filesystem. It will, for example, stay unique even if the device is plugged into another system (which may perhaps have a device with the same label).
 
   
  +
{{hc|$ lsblk -dno UUID /dev/sda1|
The disadvantage is that UUIDs make long code lines hard to read and break formatting in many configuration files (e.g. fstab or crypttab). Also every time a partition is resized or reformatted a new UUID is generated and configs have to get adjusted (manually).
 
  +
CBB6-24F2
  +
}}
   
  +
あるいは ''blkid'' を使って:
{{Tip|In case your swap partition does not have an UUID assigned, you will need to reset the swap partition using [[Swap#Swap partition|mkswap]] utility.}}
 
   
  +
{{hc|# blkid -s UUID -o value /dev/sda1|
===by-id と by-path===
 
  +
CBB6-24F2
  +
}}
   
  +
UUID を使用する利点として、名前の衝突が発生する可能性がラベルよりもずっと少ないことが挙げられます。さらに、UUID はファイルシステムの作成時に自動的に生成されます。他のシステムにデバイスを接続したときでも、一意性を保つことができます。ラベルの場合、他のシステムに接続したとき名前がカブってしまう可能性が否定できません。
{{ic|by-id}} creates a unique name depending on the hardware serial number, {{ic|by-path}} depending on the shortest physical path (according to sysfs). Both contain strings to indicate which subsystem they belong to (i.e. {{ic|-ide-}} for {{ic|by-path}}, and {{ic|-ata-}} for {{ic|by-id}}), so they are linked to the hardware controlling the device. This implies different levels of persistence: the {{ic|by-path}} will already change when the device is plugged into a different port of the controller, the {{ic|by-id}} will change when the device is plugged into a port of a hardware controller subject to another subsystem. [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/persistent_naming.html] Thus, both are not suitable to achieve persistent naming tolerant to hardware changes.
 
   
  +
逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: [[fstab]] や [[crypttab]]) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。
However, both provide important information to find a particular device in a large hardware infrastructure. For example, if you do not manually assign persistent labels ({{ic|by-label}} or {{ic|by-partlabel}}) and keep a directory with hardware port usage, {{ic|by-id}} and {{ic|by-path}} can be used to find a particular device.[http://linuxshellaccount.blogspot.in/2008/09/how-to-easily-find-wwns-of-qlogic-hba.html] [http://www.linuxquestions.org/questions/linux-server-73/how-to-find-wwn-for-dev-sdc-917269/]
 
   
  +
{{Tip|スワップパーティションに UUID が割り当てられていない場合、[[スワップ#スワップパーティション|mkswap]] ユーティリティを使ってスワップパーティションをリセットする必要があります。}}
===by-partlabel===
 
   
  +
=== by-id と by-path ===
{{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}}
 
   
  +
{{ic|by-id}} はハードウェアのシリアル番号に基づいて一意な名前を作成します。{{ic|by-path}} は (sysfs による) 一番短い物理パスを使います。どちらも、属するサブシステムを示す文字列を含んでいるため ({{ic|by-path}} の場合 {{ic|-ide-}}、{{ic|by-id}} の場合 {{ic|-ata-}})、デバイスを制御するハードウェアと繋がりがあります。このため永続性のレベルが異なってきます: {{ic|by-path}} はデバイスをコントローラの他のポートに接続したときに値が変わり、{{ic|by-id}} はデバイスを他のサブシステムが使っているハードウェアコントローラのポートに接続したときに値が変わります。[https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/persistent_naming.html] 従って、ハードウェアが変わっても値が変わらないような永続的な命名としてはどちらも不適切です。
Partition labels can be defined in the header of the partition entry on GPT disks.
 
   
  +
しかし、巨大なハードウェア基盤で特定のデバイスを見つけたいときに、どちらも有益な情報を提供します。例えば、永続的なラベル ({{ic|by-label}} や {{ic|by-partlabel}}) を手動で割り当てず、ハードウェアポートの使用を表すディレクトリが変わらない場合、{{ic|by-id}} と {{ic|by-path}} を使うことで特定のデバイスを探すことが可能です。[https://linuxshellaccount.blogspot.in/2008/09/how-to-easily-find-wwns-of-qlogic-hba.html] [https://www.linuxquestions.org/questions/linux-server-73/how-to-find-wwn-for-dev-sdc-917269/]
See also [[Wikipedia:GUID Partition Table#Partition entries]].
 
   
  +
{{Note|
This method is very similar to the [[#by-label|filesystem labels]], excepted that the dynamic directory is {{ic|/dev/disk/by-partlabel}}.
 
  +
* {{ic|by-id}} と {{ic|by-path}} のリンクは、(パーティションではなく) ディスクの場合のみ永続的であるとみなせます。パーティションは、パーティションテーブル内における番号で参照され、パーティションの順番が変更された場合にリンクが変更される可能性があります。
  +
* NVMe デバイスにおける {{ic|/dev/disk/by-path/pci-*}} のパスは、PCIe デバイスがシステムに追加または除去された場合や、ファームウェアが[https://github.com/systemd/systemd/issues/22692 デバイスを決定的に列挙しない]場合に変化してしまう場合があります。
  +
}}
   
{{hc|ls -l /dev/disk/by-partlabel/|<nowiki>
+
{{hc|$ ls -l /dev/disk/by-id/|
 
total 0
 
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20SYSTEM\x20PARTITION -> ../../sda1
+
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLINUX -> ../../sda2
+
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 HOME -> ../../sda3
+
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 SWAP -> ../../sda4
+
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part3 -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part4 -> ../../sda4
</nowiki>}}
 
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d -> ../../mmcblk0
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d-part1 -> ../../mmcblk0p1
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.002538570142d716 -> ../../nvme1n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part1 -> ../../nvme1n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part2 -> ../../nvme1n1p2
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a -> ../../nvme0n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part1 -> ../../nvme0n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part2 -> ../../nvme0n1p2
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T -> ../../nvme1n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part1 -> ../../nvme1n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part2 -> ../../nvme1n1p2
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268 -> ../../nvme0n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268-part1 -> ../../nvme0n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268-part2 -> ../../nvme0n1p2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4
  +
}}
  +
  +
{{hc|$ ls -l /dev/disk/by-path/|
  +
total 0
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1 -> ../../sda
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part1 -> ../../sda1
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part2 -> ../../sda2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part3 -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part4 -> ../../sda4
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 pci-0000:01:00.0-nvme-1 -> ../../nvme0n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:01:00.0-nvme-1-part1 -> ../../nvme0n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:01:00.0-nvme-1-part2 -> ../../nvme0n1p2
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 pci-0000:04:00.0-nvme-1 -> ../../nvme1n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:04:00.0-nvme-1-part1 -> ../../nvme1n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:04:00.0-nvme-1-part2 -> ../../nvme1n1p2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0 -> ../../mmcblk0
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0-part1 -> ../../mmcblk0p1
  +
}}
  +
  +
==== World Wide Name ====
  +
  +
{{ic|by-id}} はストレージデバイスの [[Wikipedia:ja:World Wide Name|World Wide Name (WWN)]] のリンクも作成します (そのデバイスが WWN をサポートしている場合)。他の {{ic|by-id}} リンクとは異なり、WWN は完全に永続的であり、使用されているサブシステムに依らず変化しません。
  +
  +
SATA と SAS のデバイスには {{ic|wwn-}} プレフィックスが付きますが、NVMe デバイスでは[[Wikipedia:World Wide Name#Formats|別の WWN 形式]]が使用され {{ic|nvme-eui.}} というプレフィックスが付きます。[https://github.com/systemd/systemd/pull/3136].
  +
  +
{{Tip|大抵、ストレージデバイスの WWN はそのデバイスのラベルに印刷されています (ここでのラベルは、デバイス自体に貼られているステッカーのことです)。}}
  +
  +
{{hc|$ ls -l /dev/disk/by-id/{wwn-,nvme-eui.}*|
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.002538570142d716 -> ../../nvme1n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part1 -> ../../nvme1n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part2 -> ../../nvme1n1p2
  +
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a -> ../../nvme0n1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part1 -> ../../nvme0n1p1
  +
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part2 -> ../../nvme0n1p2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4
  +
}}
  +
  +
=== by-partlabel ===
  +
  +
{{Note|この方法が関係するのは [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクだけです。}}
  +
  +
パーティションラベルは、GPT ディスクの[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)|パーティションエントリ]]のヘッダで定義することができます。
  +
  +
この方法は[[#by-label|ファイルシステムラベル]]と非常に似ています。しかし、パーティションラベルは、パーティション上のファイルシステムが変更された場合でも、影響を受けません。
  +
  +
パーティションラベルを持つ全パーティションは {{ic|/dev/disk/by-partlabel}} ディレクトリ内に出現します。
  +
  +
{{hc|$ ls -l /dev/disk/by-partlabel/|
  +
total 0
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20system\x20partition -> ../../sda1
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLinux -> ../../sda2
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 Home -> ../../sda3
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 Swap -> ../../sda4
  +
}}
  +
  +
デバイスのパーティションラベルは ''lsblk'' を使って得ることができます:
  +
  +
{{hc|$ lsblk -dno PARTLABEL /dev/sda1|
  +
EFI system partition
  +
}}
  +
  +
あるいは ''blkid'' を使って:
  +
  +
{{hc|# blkid -s PARTLABEL -o value /dev/sda1|
  +
EFI system partition
  +
}}
   
 
{{Note|
 
{{Note|
  +
* GPT パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、[[gdisk]] か ncurse ベースの [[cgdisk]] を使うことができます。どちらのプログラムも {{Pkg|gptfdisk}} パッケージに入っています。[[パーティショニング#パーティショニングツール]]を見て下さい。
* GPT partition labels have also to be different to avoid conflicts. To change your partition label, you can use {{ic|gdisk}} or the ncurse-based version {{ic|cgdisk}}. Both are available from the {{Pkg|gptfdisk}} package. See [[Partitioning#Partitioning tools]].
 
  +
* 仕様によると、GPT パーティションラベルの長さは72文字までです。
* According to the specification, GPT partition labels can be up to 72 characters long.}}
 
  +
}}
   
===by-partuuid===
+
=== by-partuuid ===
{{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}}
 
   
  +
[[#by-partlabel|GPT パーティションラベル]]のように、GPT パーティション UUID も GPT ディスク上の[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)|パーティションエントリ]]で定義されます。
Like [[#by-partlabel|GPT partition labels]], GPT partition UUID are defined in the partition entry on GPT disks.
 
   
  +
MBR はパーティション UUID をサポートしていません。しかし、Linux[https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d33b98fc82b0908e91fb05ae081acaed7323f9d2] と、libblkid[https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git/commit/?id=d67cc2889a0527b26d7bb8c76f2acac46751d673] を使用するソフトウェア (例: udev[https://github.com/systemd/systemd/pull/3293]) は、MBR パーティションに対して擬似的な PARTUUID を生成することができます。この時、形式は {{ic|''SSSSSSSS''-''PP''}} となります。{{ic|''SSSSSSSS''}} の部分はゼロで埋められた32ビットの [[Wikipedia:Master boot record#Disk identity|MBR ディスクシグネチャ]]で、{{ic|''PP''}} はゼロで埋められた16進形式のパーティション番号です。GPT パーティションの通常の PARTUUID と違って、MBR の疑似 PARTUUID は、パーティション番号が変更された場合に変わる可能性があります。
[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)]] も見て下さい。
 
   
  +
動的ディレクトリは他の方法のものと似ており、[[#by-uuid|ファイルシステム UUID]] と同じく、UUID はラベルよりも推奨されます。
The dynamic directory is similar to other methods and, like [[#by-uuid|UUID filesystems]], using UUIDs is prefered over labels.
 
   
{{hc|ls -l /dev/disk/by-partuuid/|<nowiki>
+
{{hc|$ ls -l /dev/disk/by-partuuid/|
 
total 0
 
total 0
  +
lrwxrwxrwx 1 root root 10 May 27 23:31 0003e1e5-01 -> ../../mmcblk0p1
 
lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4
 
lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4
 
lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3
 
lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3
 
lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2
 
lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1</nowiki>}}
+
lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1
  +
}}
   
  +
デバイスのパーティション UUID は ''lsblk'' を使って得ることができます:
===Udev によるデバイス名の固定===
 
   
  +
{{hc|$ lsblk -dno PARTUUID /dev/sda1|
[[Udev#固定デバイス名の設定]] を見て下さい。
 
  +
d0d0d110-0a71-4ed6-936a-304969ea36af
  +
}}
   
  +
あるいは ''blkid'' を使って:
==永続的な命名の使用==
 
   
  +
{{hc|# blkid -s PARTUUID -o value /dev/sda1|
There are various applications that can be configured using persistent naming. Following are some examples of how to configure them.
 
  +
d0d0d110-0a71-4ed6-936a-304969ea36af
  +
}}
  +
  +
=== Udev による固定デバイス名 ===
  +
  +
[[Udev#固定デバイス名を設定する]] を見て下さい。
  +
  +
== 永続的な命名の使用 ==
  +
  +
様々なアプリケーションで、永続的な命名を使うように設定を行うことができます。以下はアプリケーションの設定例です。
   
 
=== fstab ===
 
=== fstab ===
   
の記事を参照してください: [[fstab#UUID]]。
+
メインの記事を参照してください: [[fstab#ファイルシステムの識別]]。
  +
  +
=== カーネルパラメータ ===
  +
  +
永続的な名前を[[カーネルパラメータ]]で使用するには、以下の前提条件を満たさなければなりません。[[インストールガイド]]に従った標準的なインストールでは、以下の両方の前提条件を満たしています:
  +
  +
* [[udev]] が含まれている [[initramfs]] イメージを使用していること
  +
* [[mkinitcpio]] の場合、{{ic|udev}} か {{ic|systemd}} のどちらか一方の[[Mkinitcpio#HOOKS|フック]]を {{ic|/etc/mkinitcpio.conf}} で有効化していること
   
  +
ルートファイルシステムの場所はカーネルコマンドラインで {{ic|root}} パラメータを使って渡します。カーネルコマンドラインは[[ブートローダー]]から設定します。[[カーネルパラメータ#設定]] を参照してください。永続的なデバイスの命名に変更するには、ブロックデバイスを指定するパラメータ (例: {{ic|root}} と {{ic|resume}}) のみを変更して、他のパラメータはそのままにしてください。様々な命名規則がサポートされています:
===ブートマネージャ===
 
   
  +
[[#by-label|ラベルを用いた]]デバイスの永続的な命名と {{ic|1=LABEL=}} 形式。以下の例では、{{ic|Arch Linux}} がルートファイルシステムの LABEL になっています:
To use persistent names in your boot manager, the following prerequisites must be met:
 
   
  +
root="LABEL=Arch Linux"
* You are using a [[Mkinitcpio#設定|mkinitcpio]] initial RAM disk image
 
* You have udev enabled in {{ic|/etc/mkinitcpio.conf}}
 
   
  +
[[#by-uuid|UUID を用いた]]デバイスの永続的な命名と {{ic|1=UUID=}} 形式。以下の例では、{{ic|0a3407de-014b-458b-b5c1-848e92a327a3}} がルートファイルシステムの UUID になっています:
In the above example, {{ic|/dev/sda1}} is the root partition. In the [[GRUB]] {{ic|grub.cfg}} file, the ''linux'' line looks like this:
 
   
  +
root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3
linux /boot/vmlinuz-linux root=/dev/sda1 rw quiet
 
   
  +
[[#by-id と by-path|ディスク id を用いた]]デバイスの永続的な命名と {{ic|/dev}} パス形式。以下の例では、{{ic|wwn-0x60015ee0000b237f-part2}} がルートパーティションの id になっています。
Depending on which naming scheme you would prefer, change it to one of the following:
 
   
linux /boot/vmlinuz-linux root=/dev/disk/by-label/root_myhost rw quiet
+
root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2
   
  +
[[#by-partuuid|GPT パーティション UUID を用いた]]デバイスの永続的な命名と {{ic|1=PARTUUID=}} 形式。以下の例では、{{ic|98a81274-10f7-40db-872a-03df048df366}} がルートパーティションの PARTUUID になっています。
or:
 
   
  +
root=PARTUUID=98a81274-10f7-40db-872a-03df048df366
linux /boot/vmlinuz-linux root=UUID=2d781b26-0285-421a-b9d0-d4a0d3b55680 rw quiet
 
   
  +
[[#by-partlabel|GPT パーティションラベルを用いた]]デバイスの永続的な命名と {{ic|1=PARTLABEL=}} 形式。以下の例では、{{ic|GNU/Linux}} がルートパーティションの PARTLABEL になっています。
If you are using [[LILO]], then do not try this with the {{ic|1=root=...}} configuration option; it will not work. Use {{ic|1=append="root=..."}} or {{ic|1=addappend="root=..."}} instead. Read the LILO man page for more information on {{ic|append}} and {{ic|addappend}}.
 
   
  +
root="PARTLABEL=GNU/Linux"
There is an alternative way to use the label embedded in the filesystem. For example if (as above) the filesystem in {{ic|/dev/sda1}} is labeled {{ic|root_myhost}}, you would give this line to GRUB:
 
   
  +
{{TranslationStatus|Persistent block device naming|2023-08-24|785816}}
linux /boot/vmlinuz-linux root=LABEL=root_myhost rw quiet
 

2023年12月28日 (木) 13:00時点における最新版

関連記事

この記事ではブロックデバイスに永続的な名前を使う方法を説明します。永続的な命名は udev の導入によって可能になったものであり、バスによる命名と比べて複数の利点があります。使用しているマシンに複数の SATA、SCSI、IDE ディスクコントローラが存在する場合、それぞれのデバイスノードが追加される順番は一定しません。そのため、起動するたびに /dev/sda/dev/sdb といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。

ノート:
  • 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、mkinitcpio が命名方法をサポートしていても、systemd が起動時に処理できる命名法には制約が存在することがあります (例: FS#42884)。
  • この記事では LVM の論理ボリュームに言及しません。/dev/VolumeGroupName/LogicalVolumeName デバイスパスは永続的であるためです。

永続的な命名の方法

永続的な命名には4つの異なる形式があります: by-labelby-uuidby-id と by-pathGUID Partition Table (GPT) のディスクを使用する場合、さらに by-partlabelby-partuuid の形式も利用可能です。また、udev による固定デバイス名を使うこともできます。

/dev/disk/ 内のディレクトリは、デバイスがあるかどうかに応じて動的に作成・破棄されます。

ノート: ディスクのクローンは同じ名前の異なるディスクを作成することに注意してください。

以下のセクションではこれらの異なる命名規則がどのようなものであるか、またどうやって使うのかを説明しています。

lsblk コマンドを使うことで1つ目の永続的な名前をグラフィカルに表示することができます:

$ lsblk -f
NAME        FSTYPE LABEL      UUID                                 MOUNTPOINT
sda                                                       
├─sda1      vfat              CBB6-24F2                            /boot
├─sda2      ext4   Arch Linux 0a3407de-014b-458b-b5c1-848e92a327a3 /
├─sda3      ext4   Data       b411dc99-f0a0-4c87-9e05-184977be8539 /home
└─sda4      swap              f9fe0b69-a280-415d-a03a-a32752370dee [SWAP]
mmcblk0
└─mmcblk0p1 vfat              F4CA-5D75

GPT を使っている場合、代わりに blkid コマンドを使います。blkid コマンドはスクリプトでは使いやすいですが、人間にとっては読みづらいです。

# blkid
/dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af" 
/dev/sda2: LABEL="Arch Linux" UUID="0a3407de-014b-458b-b5c1-848e92a327a3" TYPE="ext4" PARTLABEL="GNU/Linux" PARTUUID="98a81274-10f7-40db-872a-03df048df366" 
/dev/sda3: LABEL="Data" UUID="b411dc99-f0a0-4c87-9e05-184977be8539" TYPE="ext4" PARTLABEL="Home" PARTUUID="7280201c-fc5d-40f2-a9b2-466611d3d49e" 
/dev/sda4: UUID="f9fe0b69-a280-415d-a03a-a32752370dee" TYPE="swap" PARTLABEL="Swap" PARTUUID="039b6c1c-7553-4455-9537-1befbc9fbc5b"
/dev/mmcblk0: PTUUID="0003e1e5" PTTYPE="dos"
/dev/mmcblk0p1: UUID="F4CA-5D75" TYPE="vfat" PARTUUID="0003e1e5-01"

by-label

ほぼすべてのファイルシステムタイプが、ラベルを持つことができます。ラベルを持つボリュームはすべて /dev/disk/by-label ディレクトリ内に出現します。

$ ls -l /dev/disk/by-label
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 Data -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 Arch\x20Linux -> ../../sda2

ほとんどのファイルシステムは、ファイルシステム作成時におけるラベルの設定をサポートしています (関連する mkfs.* ユーティリティの man ページを参照してください)。一部のファイルシステムにおいてはラベルを変更することもできます。以下は、一般的なファイルシステムにおけるラベルの変更方法です:

swap 
swaplabel -L "new label" /dev/XXX (util-linux を使用)
ext2/3/4 
e2label /dev/XXX "new label" (e2fsprogs を使用)
btrfs 
btrfs filesystem label /dev/XXX "new label" (btrfs-progs を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。)
reiserfs 
reiserfstune -l "new label" /dev/XXX (reiserfsprogs を使用)
jfs 
jfs_tune -L "new label" /dev/XXX (jfsutils を使用)
xfs 
xfs_admin -L "new label" /dev/XXX (xfsprogs を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。)
fat/vfat 
fatlabel /dev/XXX "new label" (dosfstools を使用)
mlabel -i /dev/XXX ::"new label" (mtools を使用)
exfat 
tune.exfat -L "new label" /dev/XXX (exfatprogs を使用)
exfatlabel /dev/XXX "new label" (exfatprogs または exfat-utils を使用)
ntfs 
ntfslabel /dev/XXX "new label" (ntfs-3g を使用)
udf 
udflabel /dev/XXX "new label" (udftools を使用)
crypto_LUKS (LUKS2 のみ) 
cryptsetup config --label="new label" /dev/XXX (cryptsetup を使用)

デバイスのラベルは lsblk を使って得ることができます:

$ lsblk -dno LABEL /dev/sda2
Arch Linux

あるいは blkid を使って:

# blkid -s LABEL -o value /dev/sda2
Arch Linux
ノート:
  • 衝突を避けるために、ラベルは曖昧であってはいけません。
  • ラベルに設定できるのは16文字までです。
  • ラベルはファイルシステムのプロパティであるため、単一の RAID デバイスをアドレス指定するのには適していません。
  • dm-crypt で暗号化済みコンテナを使用する場合、コンテナがロック/暗号化されている間はコンテナ内のファイルシステムのラベルは利用できなくなります。

by-uuid

UUID は、各ファイルシステムにユニークな識別子を与えるための仕組みです。UUID 識別子は、パーティションをフォーマットするときにファイルシステムユーティリティ (例: mkfs.*) によって生成されます。UUID 識別子は衝突が起こりにくいように作られています。(スワップや生の暗号化デバイスの LUKS ヘッダを含む) 全ての GNU/Linux ファイルシステムが UUID をサポートします。FAT、exFAT、NTFS ファイルシステムは UUID をサポートしていませんが、それでも、より短い UID (unique identifier) で /dev/disk/by-uuid/ 内に現れます:

$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 0a3407de-014b-458b-b5c1-848e92a327a3 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 b411dc99-f0a0-4c87-9e05-184977be8539 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 CBB6-24F2 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 f9fe0b69-a280-415d-a03a-a32752370dee -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 F4CA-5D75 -> ../../mmcblk0p1

デバイスの UUID は lsblk を使って得ることができます:

$ lsblk -dno UUID /dev/sda1
CBB6-24F2

あるいは blkid を使って:

# blkid -s UUID -o value /dev/sda1
CBB6-24F2

UUID を使用する利点として、名前の衝突が発生する可能性がラベルよりもずっと少ないことが挙げられます。さらに、UUID はファイルシステムの作成時に自動的に生成されます。他のシステムにデバイスを接続したときでも、一意性を保つことができます。ラベルの場合、他のシステムに接続したとき名前がカブってしまう可能性が否定できません。

逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: fstabcrypttab) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。

ヒント: スワップパーティションに UUID が割り当てられていない場合、mkswap ユーティリティを使ってスワップパーティションをリセットする必要があります。

by-id と by-path

by-id はハードウェアのシリアル番号に基づいて一意な名前を作成します。by-path は (sysfs による) 一番短い物理パスを使います。どちらも、属するサブシステムを示す文字列を含んでいるため (by-path の場合 -ide-by-id の場合 -ata-)、デバイスを制御するハードウェアと繋がりがあります。このため永続性のレベルが異なってきます: by-path はデバイスをコントローラの他のポートに接続したときに値が変わり、by-id はデバイスを他のサブシステムが使っているハードウェアコントローラのポートに接続したときに値が変わります。[1] 従って、ハードウェアが変わっても値が変わらないような永続的な命名としてはどちらも不適切です。

しかし、巨大なハードウェア基盤で特定のデバイスを見つけたいときに、どちらも有益な情報を提供します。例えば、永続的なラベル (by-labelby-partlabel) を手動で割り当てず、ハードウェアポートの使用を表すディレクトリが変わらない場合、by-idby-path を使うことで特定のデバイスを探すことが可能です。[2] [3]

ノート:
  • by-idby-path のリンクは、(パーティションではなく) ディスクの場合のみ永続的であるとみなせます。パーティションは、パーティションテーブル内における番号で参照され、パーティションの順番が変更された場合にリンクが変更される可能性があります。
  • NVMe デバイスにおける /dev/disk/by-path/pci-* のパスは、PCIe デバイスがシステムに追加または除去された場合や、ファームウェアがデバイスを決定的に列挙しない場合に変化してしまう場合があります。
$ ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 ata-WDC_WD2500BEVT-22ZCT0_WD-WXE908VF0470-part4 -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d -> ../../mmcblk0
lrwxrwxrwx 1 root root 10 May 27 23:31 mmc-SD32G_0x0040006d-part1 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.002538570142d716 -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-Samsung_SSD_970_EVO_Plus_2TB_S4J4NJ0N704064T-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-WDS100T1X0E-00AFY0_21455A801268-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4
$ ls -l /dev/disk/by-path/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1 -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:00:1f.2-ata-1-part4 -> ../../sda4
lrwxrwxrwx 1 root root 13 May 27 23:31 pci-0000:01:00.0-nvme-1 -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:01:00.0-nvme-1-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:01:00.0-nvme-1-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 13 May 27 23:31 pci-0000:04:00.0-nvme-1 -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:04:00.0-nvme-1-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 pci-0000:04:00.0-nvme-1-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0 -> ../../mmcblk0
lrwxrwxrwx 1 root root 10 May 27 23:31 pci-0000:07:00.0-platform-rtsx_pci_sdmmc.0-part1 -> ../../mmcblk0p1

World Wide Name

by-id はストレージデバイスの World Wide Name (WWN) のリンクも作成します (そのデバイスが WWN をサポートしている場合)。他の by-id リンクとは異なり、WWN は完全に永続的であり、使用されているサブシステムに依らず変化しません。

SATA と SAS のデバイスには wwn- プレフィックスが付きますが、NVMe デバイスでは別の WWN 形式が使用され nvme-eui. というプレフィックスが付きます。[4].

ヒント: 大抵、ストレージデバイスの WWN はそのデバイスのラベルに印刷されています (ここでのラベルは、デバイス自体に貼られているステッカーのことです)。
$ ls -l /dev/disk/by-id/{wwn-,nvme-eui.}*
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.002538570142d716 -> ../../nvme1n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part1 -> ../../nvme1n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.002538570142d716-part2 -> ../../nvme1n1p2
lrwxrwxrwx 1 root root 13 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a -> ../../nvme0n1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part1 -> ../../nvme0n1p1
lrwxrwxrwx 1 root root 15 May 27 23:31 nvme-eui.e8238fa6bf530001001b448b4566aa1a-part2 -> ../../nvme0n1p2
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f -> ../../sda
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part1 -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part2 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part3 -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 wwn-0x60015ee0000b237f-part4 -> ../../sda4

by-partlabel

ノート: この方法が関係するのは GUID Partition Table (GPT) のディスクだけです。

パーティションラベルは、GPT ディスクのパーティションエントリのヘッダで定義することができます。

この方法はファイルシステムラベルと非常に似ています。しかし、パーティションラベルは、パーティション上のファイルシステムが変更された場合でも、影響を受けません。

パーティションラベルを持つ全パーティションは /dev/disk/by-partlabel ディレクトリ内に出現します。

$ ls -l /dev/disk/by-partlabel/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20system\x20partition -> ../../sda1
lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLinux -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 Home -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 Swap -> ../../sda4

デバイスのパーティションラベルは lsblk を使って得ることができます:

$ lsblk -dno PARTLABEL /dev/sda1
EFI system partition

あるいは blkid を使って:

# blkid -s PARTLABEL -o value /dev/sda1
EFI system partition
ノート:
  • GPT パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、gdisk か ncurse ベースの cgdisk を使うことができます。どちらのプログラムも gptfdisk パッケージに入っています。パーティショニング#パーティショニングツールを見て下さい。
  • 仕様によると、GPT パーティションラベルの長さは72文字までです。

by-partuuid

GPT パーティションラベルのように、GPT パーティション UUID も GPT ディスク上のパーティションエントリで定義されます。

MBR はパーティション UUID をサポートしていません。しかし、Linux[5] と、libblkid[6] を使用するソフトウェア (例: udev[7]) は、MBR パーティションに対して擬似的な PARTUUID を生成することができます。この時、形式は SSSSSSSS-PP となります。SSSSSSSS の部分はゼロで埋められた32ビットの MBR ディスクシグネチャで、PP はゼロで埋められた16進形式のパーティション番号です。GPT パーティションの通常の PARTUUID と違って、MBR の疑似 PARTUUID は、パーティション番号が変更された場合に変わる可能性があります。

動的ディレクトリは他の方法のものと似ており、ファイルシステム UUID と同じく、UUID はラベルよりも推奨されます。

$ ls -l /dev/disk/by-partuuid/
total 0
lrwxrwxrwx 1 root root 10 May 27 23:31 0003e1e5-01 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 10 May 27 23:31 039b6c1c-7553-4455-9537-1befbc9fbc5b -> ../../sda4
lrwxrwxrwx 1 root root 10 May 27 23:31 7280201c-fc5d-40f2-a9b2-466611d3d49e -> ../../sda3
lrwxrwxrwx 1 root root 10 May 27 23:31 98a81274-10f7-40db-872a-03df048df366 -> ../../sda2
lrwxrwxrwx 1 root root 10 May 27 23:31 d0d0d110-0a71-4ed6-936a-304969ea36af -> ../../sda1

デバイスのパーティション UUID は lsblk を使って得ることができます:

$ lsblk -dno PARTUUID /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af

あるいは blkid を使って:

# blkid -s PARTUUID -o value /dev/sda1
d0d0d110-0a71-4ed6-936a-304969ea36af

Udev による固定デバイス名

Udev#固定デバイス名を設定する を見て下さい。

永続的な命名の使用

様々なアプリケーションで、永続的な命名を使うように設定を行うことができます。以下はアプリケーションの設定例です。

fstab

メインの記事を参照してください: fstab#ファイルシステムの識別

カーネルパラメータ

永続的な名前をカーネルパラメータで使用するには、以下の前提条件を満たさなければなりません。インストールガイドに従った標準的なインストールでは、以下の両方の前提条件を満たしています:

  • udev が含まれている initramfs イメージを使用していること
  • mkinitcpio の場合、udevsystemd のどちらか一方のフック/etc/mkinitcpio.conf で有効化していること

ルートファイルシステムの場所はカーネルコマンドラインで root パラメータを使って渡します。カーネルコマンドラインはブートローダーから設定します。カーネルパラメータ#設定 を参照してください。永続的なデバイスの命名に変更するには、ブロックデバイスを指定するパラメータ (例: rootresume) のみを変更して、他のパラメータはそのままにしてください。様々な命名規則がサポートされています:

ラベルを用いたデバイスの永続的な命名と LABEL= 形式。以下の例では、Arch Linux がルートファイルシステムの LABEL になっています:

root="LABEL=Arch Linux"

UUID を用いたデバイスの永続的な命名と UUID= 形式。以下の例では、0a3407de-014b-458b-b5c1-848e92a327a3 がルートファイルシステムの UUID になっています:

root=UUID=0a3407de-014b-458b-b5c1-848e92a327a3

ディスク id を用いたデバイスの永続的な命名と /dev パス形式。以下の例では、wwn-0x60015ee0000b237f-part2 がルートパーティションの id になっています。

root=/dev/disk/by-id/wwn-0x60015ee0000b237f-part2

GPT パーティション UUID を用いたデバイスの永続的な命名と PARTUUID= 形式。以下の例では、98a81274-10f7-40db-872a-03df048df366 がルートパーティションの PARTUUID になっています。

root=PARTUUID=98a81274-10f7-40db-872a-03df048df366

GPT パーティションラベルを用いたデバイスの永続的な命名と PARTLABEL= 形式。以下の例では、GNU/Linux がルートパーティションの PARTLABEL になっています。

root="PARTLABEL=GNU/Linux"
翻訳ステータス: このページは en:Persistent block device naming の翻訳バージョンです。最後の翻訳日は 2023-08-24 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。