「永続的なブロックデバイスの命名」の版間の差分
細 (リンクを修正) |
|||
(3人の利用者による、間の20版が非表示) | |||
4行目: | 4行目: | ||
[[en:Persistent block device naming]] |
[[en:Persistent block device naming]] |
||
[[es:Persistent block device naming]] |
[[es:Persistent block device naming]] |
||
− | [[ |
+ | [[fr: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/sd'''a'''}} や {{ic|/dev/sd'''b'''}} といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。 |
+ | |||
{{Note| |
{{Note| |
||
− | * 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、[[ |
+ | * 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、[[mkinitcpio]] が命名方法をサポートしていても、[[systemd]] が起動時に処理できる命名法には制約が存在することがあります (例: {{Bug|42884}})。 |
+ | * この記事では [[LVM]] の論理ボリュームに言及しません。{{ic|/dev/''VolumeGroupName''/''LogicalVolumeName''}} デバイスパスは永続的であるためです。 |
||
− | * [[LVM|LVM2]] を使用している場合、LVM は自動的にデバイス名を管理するのでこの記事を読む必要はありません。}} |
||
+ | }} |
||
− | ==永続的な命名の方法== |
+ | == 永続的な命名の方法 == |
− | 永続的な命名には4つの異なる形式があります: [[#by-label|by-label]] |
+ | 永続的な命名には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|[[ディスクのクローン]]は同じ名前の異なるディスクを作成することに注意してください。}} |
||
− | {{ic|lsblk -f}} コマンドを使うことで永続的な名前をグラフィカルに表示することができます: |
||
+ | 以下のセクションではこれらの異なる命名規則がどのようなものであるか、またどうやって使うのかを説明しています。 |
||
− | {{hc|$ lsblk -f|<nowiki> |
||
+ | |||
− | NAME FSTYPE LABEL UUID MOUNTPOINT |
||
+ | [[lsblk]] コマンドを使うことで1つ目の永続的な名前をグラフィカルに表示することができます: |
||
+ | |||
+ | {{hc|$ lsblk -f| |
||
+ | NAME FSTYPE LABEL UUID MOUNTPOINT |
||
sda |
sda |
||
− | ├─sda1 vfat CBB6-24F2 /boot |
+ | ├─sda1 vfat CBB6-24F2 /boot |
− | ├─sda2 ext4 |
+ | ├─sda2 ext4 Arch Linux 0a3407de-014b-458b-b5c1-848e92a327a3 / |
− | ├─sda3 ext4 |
+ | ├─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| |
+ | {{hc|# blkid|2= |
− | /dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI |
+ | /dev/sda1: UUID="CBB6-24F2" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="d0d0d110-0a71-4ed6-936a-304969ea36af" |
− | /dev/sda2: LABEL=" |
+ | /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=" |
+ | /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=" |
+ | /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}} ディレクトリ内に出現します。 |
|
− | {{hc|$ ls -l /dev/disk/by-label| |
+ | {{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 |
+ | 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 |
+ | ; swap : {{ic|swaplabel -L "''new label''" /dev/''XXX''}} ({{pkg|util-linux}} を使用) |
− | ; ext2/3/4 : {{ic|e2label /dev/XXX |
+ | ; ext2/3/4 : {{ic|e2label /dev/''XXX'' "''new label''"}} ({{pkg|e2fsprogs}} を使用) |
− | ; btrfs : {{ic|btrfs filesystem label /dev/XXX |
+ | ; btrfs : {{ic|btrfs filesystem label /dev/''XXX'' "''new label''"}} ({{pkg|btrfs-progs}} を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。) |
− | ; reiserfs : {{ic|reiserfstune -l |
+ | ; reiserfs : {{ic|reiserfstune -l "''new label''" /dev/''XXX''}} ({{pkg|reiserfsprogs}} を使用) |
− | ; jfs : {{ic|jfs_tune -L |
+ | ; jfs : {{ic|jfs_tune -L "''new label''" /dev/''XXX''}} ({{pkg|jfsutils}} を使用) |
− | ; xfs : {{ic|xfs_admin -L |
+ | ; xfs : {{ic|xfs_admin -L "''new label''" /dev/''XXX''}} ({{pkg|xfsprogs}} を使用。デバイスがすでにマウントされている場合は、そのデバイスのマウントポイントを使ってください。) |
− | ; fat/vfat : {{ic| |
+ | ; fat/vfat : {{ic|fatlabel /dev/''XXX'' "''new label''"}} ({{pkg|dosfstools}} を使用) |
− | + | : {{ic|mlabel -i /dev/''XXX'' ::"''new label''"}} ({{pkg|mtools}} を使用) |
|
− | ; |
+ | ; 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文字までです。 |
* ラベルに設定できるのは16文字までです。 |
||
− | * ラベルはファイルシステムのプロパティ |
+ | * ラベルはファイルシステムのプロパティであるため、単一の RAID デバイスをアドレス指定するのには適していません。 |
+ | * [[dm-crypt]] で暗号化済みコンテナを使用する場合、コンテナがロック/暗号化されている間はコンテナ内のファイルシステムのラベルは利用できなくなります。 |
||
+ | }} |
||
− | ===by-uuid=== |
+ | === by-uuid === |
− | [[wikipedia:ja:UUID|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/}} 内に現れます: |
{{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'' を使って得ることができます: |
||
+ | |||
+ | {{hc|$ lsblk -dno UUID /dev/sda1| |
||
+ | CBB6-24F2 |
||
+ | }} |
||
+ | |||
+ | あるいは ''blkid'' を使って: |
||
+ | |||
+ | {{hc|# blkid -s UUID -o value /dev/sda1| |
||
+ | CBB6-24F2 |
||
+ | }} |
||
UUID を使用する利点として、名前の衝突が発生する可能性がラベルよりもずっと少ないことが挙げられます。さらに、UUID はファイルシステムの作成時に自動的に生成されます。他のシステムにデバイスを接続したときでも、一意性を保つことができます。ラベルの場合、他のシステムに接続したとき名前がカブってしまう可能性が否定できません。 |
UUID を使用する利点として、名前の衝突が発生する可能性がラベルよりもずっと少ないことが挙げられます。さらに、UUID はファイルシステムの作成時に自動的に生成されます。他のシステムにデバイスを接続したときでも、一意性を保つことができます。ラベルの場合、他のシステムに接続したとき名前がカブってしまう可能性が否定できません。 |
||
− | 逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: fstab や crypttab) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。 |
+ | 逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: [[fstab]] や [[crypttab]]) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。 |
{{Tip|スワップパーティションに UUID が割り当てられていない場合、[[スワップ#スワップパーティション|mkswap]] ユーティリティを使ってスワップパーティションをリセットする必要があります。}} |
{{Tip|スワップパーティションに UUID が割り当てられていない場合、[[スワップ#スワップパーティション|mkswap]] ユーティリティを使ってスワップパーティションをリセットする必要があります。}} |
||
− | ===by-id と by-path=== |
+ | === by-id と by-path === |
− | {{ic|by-id}} はハードウェアのシリアル番号に基づいて一意な名前を作成します。{{ic|by-path}} は (sysfs による) 一番短い物理パスを使います。どちらも属するサブシステムを示す文字列を含んでいるため ({{ic|by-path}} の場合 {{ic|-ide-}}、{{ic|by-id}} の場合 {{ic|-ata-}})、デバイスを制御するハードウェアと繋がりがあります。このため永続性のレベルが異なってきます: {{ic|by-path}} はデバイスをコントローラの他のポートに接続したときに値が変わり、{{ic|by-id}} はデバイスを他のサブシステムが使っているハードウェアコントローラのポートに接続したときに値が変わります |
+ | {{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] 従って、ハードウェアが変わっても値が変わらないような永続的な命名としてはどちらも不適切です。 |
− | + | しかし、巨大なハードウェア基盤で特定のデバイスを見つけたいときに、どちらも有益な情報を提供します。例えば、永続的なラベル ({{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/] |
|
+ | {{Note| |
||
− | ===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-id/| |
||
− | {{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}} |
||
+ | 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 |
||
+ | }} |
||
+ | {{hc|$ ls -l /dev/disk/by-path/| |
||
− | GPT ディスクのパーティションエントリのヘッダにパーティションラベルを定義することができます。 |
||
+ | 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 ==== |
||
− | [[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)]] も見て下さい。 |
||
+ | {{ic|by-id}} はストレージデバイスの [[Wikipedia:ja:World Wide Name|World Wide Name (WWN)]] のリンクも作成します (そのデバイスが WWN をサポートしている場合)。他の {{ic|by-id}} リンクとは異なり、WWN は完全に永続的であり、使用されているサブシステムに依らず変化しません。 |
||
− | この方法は[[#by-label|ファイルシステムラベル]]とよく似ていますが、動的ディレクトリは {{ic|/dev/disk/by-partlabel}} になります。 |
||
+ | SATA と SAS のデバイスには {{ic|wwn-}} プレフィックスが付きますが、NVMe デバイスでは[[Wikipedia:World Wide Name#Formats|別の WWN 形式]]が使用され {{ic|nvme-eui.}} というプレフィックスが付きます。[https://github.com/systemd/systemd/pull/3136]. |
||
− | {{hc|ls -l /dev/disk/by-partlabel/|<nowiki> |
||
+ | |||
+ | {{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 |
total 0 |
||
− | lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\ |
+ | lrwxrwxrwx 1 root root 10 May 27 23:31 EFI\x20system\x20partition -> ../../sda1 |
− | lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\ |
+ | lrwxrwxrwx 1 root root 10 May 27 23:31 GNU\x2fLinux -> ../../sda2 |
− | lrwxrwxrwx 1 root root 10 May 27 23:31 |
+ | lrwxrwxrwx 1 root root 10 May 27 23:31 Home -> ../../sda3 |
− | lrwxrwxrwx 1 root root 10 May 27 23:31 |
+ | lrwxrwxrwx 1 root root 10 May 27 23:31 Swap -> ../../sda4 |
+ | }} |
||
− | </nowiki>}} |
||
+ | |||
+ | デバイスのパーティションラベルは ''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 パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、 |
+ | * GPT パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、[[gdisk]] か ncurse ベースの [[cgdisk]] を使うことができます。どちらのプログラムも {{Pkg|gptfdisk}} パッケージに入っています。[[パーティショニング#パーティショニングツール]]を見て下さい。 |
− | * GPT パーティションラベルは72文字まで |
+ | * 仕様によると、GPT パーティションラベルの長さは72文字までです。 |
+ | }} |
||
− | ===by-partuuid=== |
+ | === by-partuuid === |
− | {{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}} |
||
− | [[#by-partlabel|GPT パーティションラベル]] |
+ | [[#by-partlabel|GPT パーティションラベル]]のように、GPT パーティション UUID も GPT ディスク上の[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)|パーティションエントリ]]で定義されます。 |
+ | 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 はラベルよりも推奨されます。 |
− | {{hc|ls -l /dev/disk/by-partuuid/| |
+ | {{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 |
+ | 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| |
||
+ | d0d0d110-0a71-4ed6-936a-304969ea36af |
||
+ | }} |
||
+ | |||
+ | === Udev による固定デバイス名 === |
||
+ | |||
+ | [[Udev#固定デバイス名を設定する]] を見て下さい。 |
||
+ | |||
+ | == 永続的な命名の使用 == |
||
様々なアプリケーションで、永続的な命名を使うように設定を行うことができます。以下はアプリケーションの設定例です。 |
様々なアプリケーションで、永続的な命名を使うように設定を行うことができます。以下はアプリケーションの設定例です。 |
||
141行目: | 282行目: | ||
=== fstab === |
=== fstab === |
||
− | + | メインの記事を参照してください: [[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 になっています: |
||
− | ブートマネージャで永続的な名前を使う場合、以下の条件を満たす必要があります: |
||
+ | root="LABEL=Arch Linux" |
||
− | * [[Mkinitcpio#設定|mkinitcpio]] の初期 RAM ディスクイメージの使用 |
||
− | * {{ic|/etc/mkinitcpio.conf}} で udev が有効になっていること |
||
+ | [[#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: |
||
− | + | 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
といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。
目次
永続的な命名の方法
永続的な命名には4つの異なる形式があります: by-label、by-uuid、by-id と by-path。GUID Partition Table (GPT) のディスクを使用する場合、さらに by-partlabel と by-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
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 の欠点としては、生成されるコードが長いために、設定ファイル (例: fstab や crypttab) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。
by-id と by-path
by-id
はハードウェアのシリアル番号に基づいて一意な名前を作成します。by-path
は (sysfs による) 一番短い物理パスを使います。どちらも、属するサブシステムを示す文字列を含んでいるため (by-path
の場合 -ide-
、by-id
の場合 -ata-
)、デバイスを制御するハードウェアと繋がりがあります。このため永続性のレベルが異なってきます: by-path
はデバイスをコントローラの他のポートに接続したときに値が変わり、by-id
はデバイスを他のサブシステムが使っているハードウェアコントローラのポートに接続したときに値が変わります。[1] 従って、ハードウェアが変わっても値が変わらないような永続的な命名としてはどちらも不適切です。
しかし、巨大なハードウェア基盤で特定のデバイスを見つけたいときに、どちらも有益な情報を提供します。例えば、永続的なラベル (by-label
や by-partlabel
) を手動で割り当てず、ハードウェアポートの使用を表すディレクトリが変わらない場合、by-id
と by-path
を使うことで特定のデバイスを探すことが可能です。[2] [3]
$ 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].
$ 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
パーティションラベルは、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
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 の場合、
udev
かsystemd
のどちらか一方のフックを/etc/mkinitcpio.conf
で有効化していること
ルートファイルシステムの場所はカーネルコマンドラインで root
パラメータを使って渡します。カーネルコマンドラインはブートローダーから設定します。カーネルパラメータ#設定 を参照してください。永続的なデバイスの命名に変更するには、ブロックデバイスを指定するパラメータ (例: root
と resume
) のみを変更して、他のパラメータはそのままにしてください。様々な命名規則がサポートされています:
ラベルを用いたデバイスの永続的な命名と 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"