私はUbuntuを実行していますUUID
が、特定のファイルシステム(パーティションではない)を見つけたいです。私e2label /dev/sda1
はファイルシステムのラベルを見つけるために使用できることを知っていますが、を見つける同様の方法はないようですUUID
。
私は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
blkid
、私が望んでいたものが正確に得られましたが、私が求めていたものではありませんでした。(とにかくそれを受け入れます、私は頻繁にそれを使用すると確信しているので)
blkid -L
が現在使用されていblkid -o list
ます。-L
オプションは、に変更されました-L label
指定されたラベルを使用するデバイスをルックアップします。
blkid
。言及してくれてありがとう。
blkid
。私はいつもやっls -l /dev/disk/by-uuid
たばかりだ。Gentooではblkid
、sys-apps/util-linux
GPTパーティションディスクのみ
GPT形式のディスクでは、各パーティションに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があります。同じパーティションには、ある日と別の日に1つのファイルシステムを保持できます。GPT形式のディスクにのみ存在し、レガシーパーティションディスクには存在しません。通常、ここにはroot=/dev/sda1
またはを指定する以外にユーティリティはありませんroot=8:1
。
他の現在の回答は、いくつかのパーティションを含むファイルシステムの UUIDを参照しています。ファイルシステムが全体として別のパーティションまたはハードディスクにコピーされる場合、その値は変わりません。このUUIDは、移動したファイルシステムを見つけるのに役立ちます。したがって、これはおそらくほとんどの人にとってより適切です。Linuxカーネルパラメーターroot=UUID=87654321-4321-4321-a567-123456789012
はこれを指します。
私は信じてroot=LABEL=
おりroot=UUID=
、初期のユーザースペースによって実装されています。先日システムで見た初期化コードは、これらのパラメーターを/ 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#n183
-i1
か-i 1
とは反対に、-i:1
sgdisk 1.0.1で、。
これを行うスクリプトクリーンな方法は、どのタイプのファイルシステムでも動作します:
lsblk -no UUID <device-containing-FS>
または、マウントポイント(またはその中のファイル)を指定します:
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
出力は、UUID、UUID全体、およびUUIDのみです。
blkid
ルートになる必要はないので、@ christopher-cashellからの回答よりも優れています。マウントポイントまたはファイルのためのより良い行いますlsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
。
findmnt -n -o SOURCE --target ~
与える:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
存在する場合はサブボリュームを削除する必要があります。
これを行うための推奨される方法は
sudo vol_id -u /dev/sda2
UUIDの使用の詳細については、この記事を参照してください(ubuntuヘルプからですが、UUIDを使用するすべてのLinuxディストリビューションで動作するはずです)。
この質問へのコメントで述べたように、vol_idはパスに含まれていない場合があります。Ubuntuでは/ sbinにあるため、上記が機能します。フェドラの場合、必要なようです
sudo /lib/udev/vol_id -u /dev/sda2
他のディストリビューションが他の場所にvol_idを持っている場合は、コメントを投稿して、この回答に追加します。
/sbin/vol_id
する/lib/udev/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のソリューションよりも工夫されていますが、root権限を必要とせず、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アドレスは問題ありませんでした。
AIXでは、マシンを識別する1つの番号を取得するための単一の呼び出しがあります。ハードウェアが変更されてもソフトウェアが更新されても気にしないので、どうやってそれを行うのかわかりません... そして、それはめったにありません。