「永続的なブロックデバイスの命名」の版間の差分
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}} |
+ | {{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}} を使うことで特定のデバイスを探すことが可能です [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]]. |
||
− | + | この方法は[[#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: |
||
− | * |
+ | * [[Mkinitcpio#設定|mkinitcpio]] の初期 RAM ディスクイメージの使用 |
− | * |
+ | * {{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
といったデバイス名は入れ替わる可能性があり、下手をすると、システムが起動できなくなったり、カーネルパニックが発生したり、ブロックデバイスが表示されなくなってしまいます。永続的な命名によってこれらの問題は解決します。
目次
永続的な命名の方法
永続的な命名には4つの異なる形式があります: by-label, by-uuid, by-id と by-path。GUID Partition Table (GPT) のディスクを使用する場合、さらに by-partlabel と by-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 を使うことはできます。
by-uuid
UUID を使うことで一意に特定可能な識別子をファイルシステムに与えることができます。UUID の識別子は、パーティションをフォーマットするときにファイルシステムユーティリティ (例: mkfs.*
) によって生成されます。UUID は名前の衝突が起こらないように作られています。(スワップや暗号化デバイスの LUKS ヘッダなども含む) 全ての GNU/Linux ファイルシステムが UUID をサポートします。FAT や NTFS ファイルシステム (上記の fat と windows ラベル) は 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 が生成されるので、設定を手動で変更する必要が生じます。
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]。
by-partlabel
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
by-partuuid
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