pengembangan-web-mp.com

Bagaimana cara menemukan UUID dari sistem file

Saya menjalankan Ubuntu, dan ingin mengetahui UUID dari sistem file tertentu (bukan partisi). Saya tahu saya bisa menggunakan e2label /dev/sda1 untuk mengetahui label sistem file, tetapi sepertinya tidak ada cara yang mirip untuk menemukan UUID.

135
Brad Gilbert

Perintah lain yang mungkin tersedia dan juga berfungsi dengan baik untuk ini adalah 'blkid'. Itu bagian dari paket e2fsprogs. Contoh penggunaannya:

Cari data di/dev/sda1:

[email protected]:~$ Sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Tampilkan data UUID untuk semua partisi:

[email protected]:~$ Sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

Tampilkan data UUID untuk semua partisi dalam format yang lebih mudah dibaca: (Catatan: dalam rilis yang lebih baru, blkid -L memiliki arti berbeda, dan blkid -o list sebagai gantinya harus digunakan)

[email protected]:~$ 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

Tampilkan hanya UUID untuk/dev/sda1 dan tidak ada yang lain:

[email protected]:~$ Sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
169

Hanya Untuk Disk Partisi GPT

Pada disk yang diformat GPT setiap partisi diberi GUID, yang merupakan bentuk UUID, meskipun mungkin bukan apa yang dimaksud poster asli. Karena itu jawaban ini mungkin kurang membantu bagi penanya yang asli. Meskipun demikian saya percaya ada perbedaan penting yang harus diperhatikan.

Untuk mendapatkan GUID dari partisi 1 di disk/dev/sda yang diformat GPT, serta label partisi dan sebagainya:

Sudo sgdisk -i 1 /dev/sda

atau semua dengan:

ls -l /dev/disk/by-partuuid

Untuk mem-boot dengan root dari sistem file pada partisi tertentu Anda akan menggunakan sintaks parameter kernel linux dari:

root=PARTUUID=87654321-4321-4321-abcd-123456789012

Dalam hal ini Anda dapat menentukan hanya awal UUID - cukup unik. Parameter ini lebih primitif dan dapat dipahami oleh kernel sebelumnya dalam proses bootnya.


Ada perbedaan dalam semantik antara ini:

Disk memegang partisi, partisi memegang sistem file, sistem file menyimpan direktori dan file. Untuk beberapa pengaturan dan sistem operasi ada lebih banyak lapisan.

The GUID UUID dan label terkait merujuk ke partisi, tetapi bukan isi partisi. Partisi baru pada disk yang sama, atau partisi pada disk baru akan memiliki GUID UUID. Partisi yang sama dapat menampung satu sistem file satu hari dan lainnya pada hari yang berbeda. Partisi ini hanya ada untuk disk yang diformat GPT, tetapi tidak untuk disk yang dipartisi sebelumnya. Biasanya tidak ada utilitas di sini selain menentukan root=/dev/sda1 atau root=8:1.

Jawaban lain saat ini merujuk pada UUID dari sebuah sistem file di beberapa partisi yang berisi. Jika sistem file disalin, secara keseluruhan, ke partisi atau hard disk lain, nilainya tetap sama. UUID ini bermanfaat untuk menemukan sistem file yang dipindahkan. Karena itu, ini mungkin lebih relevan bagi kebanyakan orang. Parameter kernel Linux root=UUID=87654321-4321-4321-a567-123456789012 mengacu pada ini.

Aku percaya root=LABEL= dan root=UUID= diimplementasikan oleh userspace awal, kode init yang saya lihat kemarin di sistem saya menerjemahkan parameter-parameter ini ke/dev/disk/by-uuid dan/dev/disk/by-label (tautan yang saya percaya dibuat oleh udev di userspace di sistem saya).

[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n18

11
John S Gruber

Cara bersih-script untuk melakukan ini yang bekerja pada semua jenis sistem file adalah:

lsblk -no UUID <device-containing-FS>

Atau, mengingat titik mount (atau file apa pun di dalamnya):

lsblk -no UUID $(df -P <file> | awk 'END{print $1}')

Outputnya adalah UUID, seluruh UUID, dan tidak lain adalah UUID.

8
Tom Hale

Cara termudah untuk melakukan ini untuk ext2/ext3/ext4 adalah:

/sbin/tune2fs -l /dev/sda1
5
Eddie

Cara yang disarankan untuk melakukan ini adalah melakukan

Sudo vol_id -u /dev/sda2

Untuk lebih lanjut tentang penggunaan UUID, lihat artikel ini (dari bantuan ubuntu, tetapi harus berfungsi untuk distro linux apa pun yang menggunakan UUID).

Seperti disebutkan dalam komentar untuk pertanyaan ini, vol_id mungkin tidak ada di jalur Anda. Di ubuntu ia berada di/sbin sehingga hal di atas akan berfungsi. Bagi Fedora, itu tampaknya perlu

Sudo /lib/udev/vol_id -u /dev/sda2

Jika distribusi lain memiliki vol_id di tempat lain maka poskan komentar dan saya akan menambahkannya ke jawaban ini.

3
Hamish Downer

Ini sepertinya bekerja untuk saya:

Sudo dumpe2fs /dev/sda1 | grep UUID
3

Dengan asumsi Anda menginginkan UUID untuk sda1, Anda dapat mencoba sesuatu seperti ini:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done

Sesuaikan sda1 sesuai. Untuk mendapatkan UUID untuk semua partisi, jatuhkan greps dan cut, a la:

for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done

Contoh output untuk sda1 di desktop saya:

[[email protected] ~]$ 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

Sunting: Harap dicatat bahwa solusi ini, walaupun lebih dibikin daripada udev-> vol_id, tidak tidak memerlukan hak akses root, akan bekerja pada kernel post-2005 atau lebih, dan bergantung pada alat yang ada di setiap Distribusi Linux yang secara default di jalur untuk setiap pengguna.

2

Anda juga dapat menggunakan ini untuk mencetak semua UUID:

for disk in /dev/disk/by-uuid/*; do 
    basename "$(readlink "$disk")"
    basename "$disk"
    echo
done

atau perintah yang bisa dibilang lebih sederhana ini, menggantikan sda1 dengan perangkat yang ingin Anda cari:

disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;

adaptasi dari metode kedua untuk mencetak semua UUID:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;
1
kiri
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

Di atas tampaknya bekerja pada sebagian besar (semua yang saya temukan) sistem Linux selama bertahun-tahun. Mungkin ada kekurangan, saya tidak tahu. Saya lebih suka mendapatkan nomor seri tetapi ... ini adalah UUID dari sistem berkas root.

Jika ada yang punya cara untuk mendapatkan nomor seri tanpa perlu menjadi root (seperti milik saya) dan tidak menginstal paket "tidak biasa" yang berbeda dalam versi Unix yang berbeda saya akan sangat menghargainya - selalu bisa belajar sesuatu. Dan saya sadar saya mencampur hal-hal - itu adalah sistem file root UUID, bukan disk.

Tujuannya, BTW, adalah untuk menghasilkan nomor unik per mesin yang tidak dapat dimodifikasi (seperti nomor seri disk dan seperti alamat MAC dulu dahulu).

Ini digunakan untuk pengkodean perangkat lunak ke satu mesin. Alamat MAC baik-baik saja sampai mereka mengizinkannya menjadi virtual ... beberapa pelanggan busuk hanya mengatur alamat MAC mereka menjadi konstan (pada jaringan yang berbeda tentu saja) dan menghindari membayar saya.

Di AIX ada satu panggilan untuk mendapatkan satu nomor yang mengidentifikasi mesin. Tidak masalah jika perubahan perangkat keras atau pembaruan perangkat lunak terjadi sehingga saya tidak tahu bagaimana mereka melakukannya ... Jika motherboard berubah, maka angkanya berubah, jadi saya pikir mereka menyembunyikannya di sana. Dan itu sangat jarang.

1
Eric Eberhard

Anda dapat menggunakan yang berikut ini untuk mendapatkan UUID untuk drive tertentu,

Sudo vol_id -u /dev/sda1

atau Anda dapat menggunakan ini untuk mendaftar semua UUID untuk media yang dilampirkan,

ls /dev/disk/by-uuid
0
Rich Adams