私はUbuntuを実行していて、特定のファイルシステム(パーティションではない)のUUID
を調べたいと思っています。 e2label /dev/sda1
を使用してファイルシステムのラベルを検索しますが、UUID
を検索する同様の方法はないようです。
使用可能で、このために非常にうまく機能する別のコマンドは「blkid」です。これは、e2fsprogsパッケージの一部です。それの使用例:
/ dev/sda1でデータを検索します。
topher@crucible:~$ Sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
すべてのパーティションのUUIDデータを表示します。
topher@crucible:~$ Sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"
すべてのパーティションのUUIDデータを読みやすい形式で表示します(注:新しいリリースではblkid -L
は異なる意味を持ち、blkid -o list
を代わりに使用してください)
topher@crucible:~$ Sudo blkid -L
device fs_type label mount point UUID
-------------------------------------------------------------------------------
/dev/sda1 ext3 / 727cac18-044b-4504-87f1-a5aefa774bda
/dev/sdc ext3 /home 467c4aa9-963d-4467-8cd0-d58caaacaff4
/ dev/sda1のUUIDのみを表示し、他には何も表示しません。
topher@crucible:~$ Sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
GPTパーティションディスクのみ
GPTフォーマットのディスクでは、各パーティションにはGUIDが割り当てられています。GUIDはUUIDの形式ですが、おそらく元の投稿者が参照していたものとは異なります。したがって、この回答はおそらく元の質問者にとってあまり役に立ちません。それでも、注意すべき重要な違いがあると思います。
GPTでフォーマットされたディスク/ dev/sda上のパーティション1のGUID)と、そのパーティションラベルなどを取得するには:
Sudo sgdisk -i 1 /dev/sda
または以下のすべて:
ls -l /dev/disk/by-partuuid
ファイルシステムのルートが特定のパーティションにある状態で起動するには、次のLinuxカーネルパラメータ構文を使用します。
root=PARTUUID=87654321-4321-4321-abcd-123456789012
この場合、UUIDの先頭のみを指定できます。一意になるように指定します。このパラメータはより原始的であり、ブートプロセスの早い段階でカーネルによって理解できます。
これらの間には意味論の違いがあります:
ディスクはパーティションを保持し、パーティションはファイルシステムを保持し、ファイルシステムはディレクトリとファイルを保持します。一部のセットアップとオペレーティングシステムでは、より多くの層があります。
GUID UUIDおよび関連するラベルはパーティションを参照しますが、パーティションの内容は参照しません。同じディスク上の新しいパーティション、または新しいディスク上のパーティションには、新しいGUID UUID。同じパーティションは、あるファイルシステムと別の日に別のファイルシステムを保持できます。これは、GPTフォーマットのディスクにのみ存在し、レガシーパーティションディスクには存在しません。通常、ここでは、root=/dev/sda1
またはroot=8:1
を指定する以外にユーティリティはありません。 。
他の現在の回答は、いくつかの包含パーティション内のファイルシステムのUUIDを参照しています。ファイルシステムが全体として別のパーティションまたはハードディスクにコピーされた場合、その値は変わりません。このUUIDは、移動されたファイルシステムを見つけるのに役立ちます。したがって、これはおそらくほとんどの人にとってより適切です。 Linuxカーネルパラメータroot=UUID=87654321-4321-4321-a567-123456789012
はこれを参照します。
root=LABEL=
とroot=UUID=
は初期のユーザースペースによって実装されていると思います。システムで先日見たinitコードは、これらのパラメーターを/ dev/disk/by-uuidと/ dev/disk/by-labelに変換しました(リンクは私のシステムのユーザースペースのudev)。
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n18
これを行うスクリプトクリーンな方法は、あらゆるタイプのファイルシステムで機能します。
lsblk -no UUID <device-containing-FS>
または、マウントポイント(またはその中の任意のファイル)を指定します。
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
出力はUUID、UUID全体、およびUUIDのみです。
Ext2/ext3/ext4でこれを行う最も簡単な方法は、次のとおりです。
/sbin/tune2fs -l /dev/sda1
これを行うための推奨方法は、
Sudo vol_id -u /dev/sda2
UUIDの使用の詳細については、 この記事 を参照してください(ubuntuヘルプから、UUIDを使用するすべてのLinuxディストリビューションで機能するはずです)。
この質問のコメントに記載されているように、vol_idがパスに含まれていない可能性があります。 ubuntuでは/ sbinにあるため、上記は機能します。 Fedoraの場合、
Sudo /lib/udev/vol_id -u /dev/sda2
他のディストリビューションのvol_idが他の場所にある場合は、コメントを投稿して、この回答に追加します。
これは私にとってはうまくいくようです:
Sudo dumpe2fs /dev/sda1 | grep UUID
Sda1のUUIDが必要だとすると、次のようなことを試すことができます。
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done
それに応じてsda1を調整します。すべてのパーティションのUUIDを取得するには、グラプとカットをドロップします。
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done
デスクトップ上のsda1のサンプル出力:
[mihailim@home ~]$ for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sdb3 | cut -d\: -f2 | cut -d/ -f5 ; done
dc8c49f1-e2dc-46bc-ba02-013f26c85f70
編集:この解決策は、udev-> vol_idの解決策よりも工夫されていますが、ルート権限が必要ですnotは、2005年以降のカーネルで機能し、すべてのツールに依存していることに注意してくださいデフォルトで任意のユーザーのパスにあるLinuxディストリビューション。
これを使用して、すべてのUUIDを出力することもできます。
for disk in /dev/disk/by-uuid/*; do
basename "$(readlink "$disk")"
basename "$disk"
echo
done
またはこの間違いなくシンプルなコマンド、sda1
検索対象のデバイス:
disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;
すべてのUUIDを出力するための2番目の方法の適応:
find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'
上記は、長年にわたってほとんどの(私が見つけたすべての)Linuxシステムで機能するようです。それは欠陥があるかもしれません、私は知りません。シリアル番号を取得したいのですが、これはルートファイルシステムのUUIDです。
(私のように)rootである必要なくシリアル番号を取得する方法があり、UNIXの異なるバージョンで異なる「異常な」パッケージをインストールしない場合、私はそれを感謝します-常に何かを学ぶことができます。そして私は私が物事を混合していることを認識しています-これはルートファイルシステムのUUIDであり、ディスクではありません。
BTWの目的は、変更できないマシンごとに一意の番号を生成することです(ディスクのシリアル番号や、かつてのMACアドレスなど)。
ソフトウェアを単一のマシンにエンコードするために使用されます。 MACアドレスは、仮想アドレスが許可されるまでは問題ありませんでした。一部の不快な顧客は、MACアドレスを一定に(もちろん、異なるネットワーク上で)設定し、私への支払いを回避しています。
AIXでは、マシンを識別する1つの番号を取得する単一の呼び出しがあります。ハードウェアの変更やソフトウェアの更新が発生するかどうかは問題ではないので、どのように行われるのかわかりません...マザーボードが変更されると、数が変わるため、非表示になっていると思います。そしてそれはまれです。
以下を使用して、特定のドライブのUUIDを取得できます。
Sudo vol_id -u /dev/sda1
または、これを使用して、接続されたメディアのすべてのUUIDをリストできます。
ls /dev/disk/by-uuid