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

提供: ArchWiki
ナビゲーションに移動 検索に移動
65行目: 65行目:
 
{{Note|
 
{{Note|
 
* root パーティションのファイルシステムラベルを変更する場合、先にパーティションをアンマウントしなければならないので、"ライブ" GNU/Linux ディストリビューションから行う必要があります。
 
* root パーティションのファイルシステムラベルを変更する場合、先にパーティションをアンマウントしなければならないので、"ライブ" GNU/Linux ディストリビューションから行う必要があります。
  +
* ラベルを付けるときは衝突しないような一義的な名前を付ける必要があります。
* Labels have to be unambiguous to prevent any possible conflicts.
 
  +
* ラベルに設定できるのは16文字までです。
* Labels can be up to 16 characters long.
 
  +
* ラベルはファイルシステムのプロパティなので、RAID デバイスを永続的に参照したいようなときには向いていません。}}
* 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 や NTFS ファイルシステム (上記の ''fat'' と ''windows'' ラベル) は 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/|
81行目: 81行目:
 
}}
 
}}
   
  +
UUID を使用する利点として、名前の衝突が発生する可能性がラベルよりもずっと少ないことが挙げられます。さらに、UUID はファイルシステムの作成時に自動的に生成されます。他のシステムにデバイスを接続したときでも、一意性を保つことができます。ラベルの場合、他のシステムに接続したとき名前がカブってしまう可能性が否定できません。
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).
 
   
  +
逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: fstab や crypttab) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい UUID が生成されるので、設定を手動で変更する必要が生じます。
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).
 
   
  +
{{Tip|スワップパーティションに UUID が割り当てられていない場合、[[スワップ#スワップパーティション|mkswap]] ユーティリティを使ってスワップパーティションをリセットする必要があります。}}
{{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.}}
 
   
 
===by-id と by-path===
 
===by-id と by-path===
   
{{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.
+
{{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]。従って、ハードウェアが変わっても値が変わらないような永続的な命名としてはどちらも使えません。
   
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/]
+
ただし、巨大なハードウェアインフラストラクチャで特定のデバイスを見つけたいときは有益な情報となります。例えば、永続的なラベル ({{ic|by-label}} {{ic|by-partlabel}}) を手動で割り当てておらず、使用するハードウェアポートとディレクトリを変えていない場合、{{ic|by-id}} {{ic|by-path}} を使うことで特定のデバイスを探すことが可能です [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/]
   
 
===by-partlabel===
 
===by-partlabel===
97行目: 97行目:
 
{{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}}
 
{{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}}
   
  +
GPT ディスクのパーティションエントリのヘッダにパーティションラベルを定義することができます。
Partition labels can be defined in the header of the partition entry on GPT disks.
 
   
  +
[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)]] も見て下さい。
See also [[Wikipedia:GUID Partition Table#Partition entries]].
 
   
This method is very similar to the [[#by-label|filesystem labels]], excepted that the dynamic directory is {{ic|/dev/disk/by-partlabel}}.
+
この方法は[[#by-label|ファイルシステムラベル]]とよく似ていますが、動的ディレクトリは {{ic|/dev/disk/by-partlabel}} になります。
   
 
{{hc|ls -l /dev/disk/by-partlabel/|<nowiki>
 
{{hc|ls -l /dev/disk/by-partlabel/|<nowiki>
112行目: 112行目:
   
 
{{Note|
 
{{Note|
  +
* GPT パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、{{ic|gdisk}} か ncurse ベースの {{ic|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)]] のディスクでだけ使えます。}}
 
{{Note|この方法は [[GUID Partition Table|GUID Partition Table (GPT)]] のディスクでだけ使えます。}}
   
  +
[[#by-partlabel|GPT パーティションラベル]]と同じように、GPT パーティション UUID は GPT ディスクのパーティションエントリに定義されます。
Like [[#by-partlabel|GPT partition labels]], GPT partition UUID are defined in the partition entry on GPT disks.
 
   
 
[[Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33)]] も見て下さい。
 
[[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/|<nowiki>
137行目: 137行目:
 
==永続的な命名の使用==
 
==永続的な命名の使用==
   
  +
様々なアプリケーションで、永続的な命名を使うように設定を行うことができます。以下はアプリケーションの設定例です。
There are various applications that can be configured using persistent naming. Following are some examples of how to configure them.
 
   
 
=== fstab ===
 
=== fstab ===
145行目: 145行目:
 
===ブートマネージャ===
 
===ブートマネージャ===
   
  +
ブートマネージャで永続的な名前を使う場合、以下の条件を満たす必要があります:
To use persistent names in your boot manager, the following prerequisites must be met:
 
   
* You are using a [[Mkinitcpio#設定|mkinitcpio]] initial RAM disk image
+
* [[Mkinitcpio#設定|mkinitcpio]] の初期 RAM ディスクイメージの使用
* You have udev enabled in {{ic|/etc/mkinitcpio.conf}}
+
* {{ic|/etc/mkinitcpio.conf}} で udev が有効になっていること
   
 
In the above example, {{ic|/dev/sda1}} is the root partition. In the [[GRUB]] {{ic|grub.cfg}} file, the ''linux'' line looks like this:
 
In the above example, {{ic|/dev/sda1}} is the root partition. In the [[GRUB]] {{ic|grub.cfg}} file, the ''linux'' line looks like this:

2015年7月3日 (金) 18:44時点における版

関連記事

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

ノート:
  • 永続的な命名には制約が存在しますが、それはこの記事では扱っていません。例えば、mkinitcpio が命名方法をサポートしていても、systemd が起動時に処理できる命名法には制約が存在することがあります (例: FS#42884)。
  • LVM2 を使用している場合、LVM は自動的にデバイス名を管理するのでこの記事を読む必要はありません。

永続的な命名の方法

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

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

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

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

GPT を使っている場合、代わりに blkid コマンドを使います。blkid コマンドはスクリプトで処理しやすいように出力しますが、人間が読むときは読みづらいかもしれません。

$ blkid
/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/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

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 SYSTEM -> ../../sda2

ファイルシステムのラベルは変更することが可能です。一般的に使われているファイルシステムのラベルを変更する方法は以下の通りになります:

swap 
swaplabel -L <label> /dev/XXX (util-linux を使用)
ext2/3/4 
e2label /dev/XXX <label> (e2fsprogs を使用)
btrfs 
btrfs filesystem label /dev/XXX <label> (btrfs-progs を使用)
reiserfs 
reiserfstune -l <label> /dev/XXX (reiserfsprogs を使用)
jfs 
jfs_tune -L <label> /dev/XXX (jfsutils を使用)
xfs 
xfs_admin -L <label> /dev/XXX (xfsprogs を使用)
fat/vfat 
dosfslabel /dev/XXX <label> (dosfstools を使用)
fat/vfat 
mlabel -i /dev/XXX ::<label> (mtools を使用)
ntfs 
ntfslabel /dev/XXX <label> (ntfs-3g を使用)
zfs 
このファイルシステムは /dev/disk/by-label をサポートしていません。ただし #by-partlabel を使うことはできます。
ノート:
  • root パーティションのファイルシステムラベルを変更する場合、先にパーティションをアンマウントしなければならないので、"ライブ" GNU/Linux ディストリビューションから行う必要があります。
  • ラベルを付けるときは衝突しないような一義的な名前を付ける必要があります。
  • ラベルに設定できるのは16文字までです。
  • ラベルはファイルシステムのプロパティなので、RAID デバイスを永続的に参照したいようなときには向いていません。

by-uuid

UUID を使うことで一意に特定可能な識別子をファイルシステムに与えることができます。UUID の識別子は、パーティションをフォーマットするときにファイルシステムユーティリティ (例: mkfs.*) によって生成されます。UUID は名前の衝突が起こらないように作られています。(スワップや暗号化デバイスの LUKS ヘッダなども含む) 全ての GNU/Linux ファイルシステムが UUID をサポートします。FAT や NTFS ファイルシステム (上記の fatwindows ラベル) は 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

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

逆に UUID の欠点としては、生成されるコードが長いために、設定ファイル (例: fstab や crypttab) が読みづらくなったり整形が崩れてしまうことがあります。また、パーティションのサイズを変更したり、再フォーマットをするたびに新しい 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-partlabel

ノート: この方法は GUID Partition Table (GPT) のディスクでだけ使えます。

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

Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33) も見て下さい。

この方法はファイルシステムラベルとよく似ていますが、動的ディレクトリは /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
ノート:
  • GPT パーティションラベルも名前が衝突しないように付ける必要があります。パーティションラベルを変更したいときは、gdisk か ncurse ベースの cgdisk を使います。どちらのプログラムも gptfdisk パッケージに入っています。パーティショニング#パーティショニングツールを見て下さい。
  • GPT パーティションラベルは72文字まで設定できると仕様で決まっています。

by-partuuid

ノート: この方法は GUID Partition Table (GPT) のディスクでだけ使えます。

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

Wikipedia:ja:GUIDパーティションテーブル#パーティションエントリ (LBA 2〜33) も見て下さい。

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

ls -l /dev/disk/by-partuuid/
total 0
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

Udev によるデバイス名の固定

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

永続的な命名の使用

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

fstab

次の記事を参照してください: fstab#UUID

ブートマネージャ

ブートマネージャで永続的な名前を使う場合、以下の条件を満たす必要があります:

  • mkinitcpio の初期 RAM ディスクイメージの使用
  • /etc/mkinitcpio.conf で udev が有効になっていること

In the above example, /dev/sda1 is the root partition. In the GRUB grub.cfg file, the linux line looks like this:

linux /boot/vmlinuz-linux root=/dev/sda1 rw quiet

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

or:

linux /boot/vmlinuz-linux root=UUID=2d781b26-0285-421a-b9d0-d4a0d3b55680 rw quiet

If you are using LILO, then do not try this with the root=... configuration option; it will not work. Use append="root=..." or addappend="root=..." instead. Read the LILO man page for more information on append and addappend.

There is an alternative way to use the label embedded in the filesystem. For example if (as above) the filesystem in /dev/sda1 is labeled root_myhost, you would give this line to GRUB:

linux /boot/vmlinuz-linux root=LABEL=root_myhost rw quiet