Pertanyaan Bagaimana cara menemukan UUID dari suatu sistem file


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


114
2018-05-02 15:47




Terima kasih atas semua jawabannya, saya yakin saya akan menggunakan semuanya dalam situasi yang berbeda. - Brad Gilbert
Perhatikan bahwa judul yang digunakan adalah "Bagaimana cara menemukan UUID dari partisi". Pertanyaan itu hanya masuk akal ketika menggunakan tabel partisi GPT. Inilah jawaban untuk pertanyaan itu. - Alastair Irvine


Jawaban:


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

Cari data di / dev / sda1:

topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

Tampilkan data UUID untuk semua partisi:

topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"

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

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

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

topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda

144
2018-05-04 19:11



Di komputer Ubuntu saya, saya tidak perlu menggunakan sudo. - Brad Gilbert
Hanya mengetik blkid, mendapatkan saya persis apa yang saya inginkan, tetapi tidak cukup apa yang saya minta. (Saya menerimanya juga, karena saya yakin saya akan sering menggunakannya) - Brad Gilbert
Pada versi yang lebih baru dari Ubuntu, perintah yang sama untuk blkid -L sekarang blkid -o list; itu -L opsi telah diubah menjadi -L label untuk mencari perangkat yang menggunakan label yang ditentukan. - aculich
@aculich Saya telah memperbarui jawaban untuk menyertakan sintaks terbaru untuk blkid. Terima kasih sudah menyebutkannya. - Christopher Cashell
Luar biasa, saya tidak pernah tahu blkid; Saya selalu baru saja selesai ls -l /dev/disk/by-uuid. Di Gentoo, blkid dalam sys-apps/util-linux - AdmiralNemo


Hanya untuk GPT Disk Partisi

Pada disk yang diformat GPT, setiap partisi diberi GUID, yang merupakan bentuk UUID, meskipun mungkin bukan yang dimaksud oleh poster asli. Oleh karena itu, jawaban ini mungkin kurang bermanfaat bagi penanya yang asli. Namun demikian saya percaya ada perbedaan penting untuk diperhatikan.

Untuk mendapatkan GUID partisi 1 pada GPT disk yang diformat / dev / sda, serta label partisi dan seterusnya:

sudo sgdisk -i 1 /dev/sda

atau semua dengan:

ls -l /dev/disk/by-partuuid

Untuk boot dengan root dari sistem file yang berada di partisi tertentu Anda akan menggunakan sintaks parameter kernel linux dari:

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

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


Ada perbedaan semantik antara ini:

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

GUID UUID dan label terkait mengacu pada partisi, tetapi bukan isi partisi. Partisi baru pada disk yang sama, atau partisi pada disk baru akan memiliki UUID GUID baru. Partisi yang sama dapat menyimpan satu sistem file satu hari dan yang lain pada hari yang berbeda. Ini hanya ada untuk disk berformat GPT, tetapi tidak untuk disk yang dipartisi legacy. Biasanya tidak ada utilitas di sini selain menentukan root=/dev/sda1 atau root=8:1.

Jawaban saat ini mengacu pada UUID dari a berkas sistem di beberapa partisi yang berisi. Jika sistem file disalin, secara keseluruhan, ke partisi lain atau hard disk yang nilainya tetap sama. UUID ini berguna dalam mencari sistem file yang dipindahkan. Oleh karena itu ini mungkin lebih berkaitan dengan kebanyakan orang. Parameter kernel Linux root=UUID=87654321-4321-4321-a567-123456789012 mengacu pada ini.

aku percaya root=LABEL= dan root=UUID= diimplementasikan oleh pengguna awal, kode init yang saya lihat hari lain di sistem saya diterjemahkan parameter ini ke / dev / disk / by-uuid dan / dev / disk / by-label (tautan yang saya yakini dibuat oleh udev di userspace pada saya sistem).

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


9
2018-06-23 21:55



Penggunaan yang benar tampaknya -i1 atau -i 1, sebagai lawan -i:1, dengan sgdisk 1.0.1. - Charles Duffy
@CharlesDuffy terima kasih telah menemukan kesalahan itu. Saya telah mengedit jawaban untuk memperbaikinya. - John S Gruber


Cara termudah untuk melakukannya untuk ext2 / ext3 / ext4 adalah:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Ini akan bekerja asalkan filesystem Anda diformat sebagai ext2, ext3 atau ext4. Sebagian besar sistem berkas adalah salah satunya tetapi tidak semua. Ini juga tidak akan berfungsi untuk partisi swap. Lihat jawaban saya untuk cara universal. - Hamish Downer
Ini menghasilkan kasus saya menjadi Couldn't find valid filesystem superblock. - Michel


Cara yang disarankan untuk melakukan ini adalah melakukannya

sudo vol_id -u /dev/sda2

Untuk lebih lanjut tentang menggunakan UUID, lihat artikel ini (dari bantuan ubuntu, tetapi harus bekerja untuk setiap distro linux menggunakan UUID).

Seperti tercantum dalam komentar untuk pertanyaan ini, vol_id mungkin tidak ada di jalur Anda. Di ubuntu itu di / sbin jadi di atas akan bekerja. Untuk fedora tampaknya perlu

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

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


3
2018-05-02 16:53



Ini tidak berfungsi pada laptop Fedora 10 saya. - Eddie
Ini adalah solusi yang jauh lebih baik daripada saya. Eddie, vol_id terletak di / lib / udev. mish, bisakah Anda mengedit jawaban Anda untuk awalan path lengkap di depan vol_id? / lib / udev tidak berada di jalur root secara default pada distribusi mana pun yang saya sadari. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" tampaknya berfungsi. Hanya sedikit orang yang memiliki / lib / udev di jalan mereka. - Eddie
Di komputer Ubuntu saya ada tautan simbolis dari /sbin/vol_id untuk /lib/udev/vol_id - Brad Gilbert
vol_id telah diturunkan dari Ubuntu sebagai Karmic (9.10) jadi tidak berguna atau relevan lagi. Ia pergi melalui banyak contortions untuk sampai di sana vol_id pada satu titik dibangun untuk menggantikan blkid. - Alain O'Dea


Dengan asumsi Anda ingin 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 cuts, a la:

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

Contoh keluaran untuk sda1 di desktop saya:

[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

Edit: Harap dicatat bahwa solusi ini, sementara lebih banyak dibuat daripada udev-> vol_id satu, tidak tidak membutuhkan hak akses root, akan bekerja pada kernel pasca-2005 atau lebih, dan bergantung pada alat yang ada di setiap distribusi Linux yang secara default di jalur untuk setiap pengguna.


2
2018-05-02 16:22



Ini akan bekerja pada komputer yang menjalankan devfs cukup baru. - Eddie


Ini sepertinya berhasil untuk saya:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





Anda juga dapat menggunakan ini untuk mencetak semua UUIDs:

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

atau perintah ini bisa dibilang lebih sederhana, 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
2017-11-30 23:09





Cara bersih skrip untuk melakukan ini yang berfungsi 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 ada apa-apa selain UUID.


1
2017-12-30 13:29





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 terlampir,

ls /dev/disk/by-uuid

0
2018-05-02 17:24



Tidak lagi berlaku pada Ubuntu 9.10 as vol_id telah dihapus. - Alain O'Dea


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. Itu mungkin memiliki kekurangan, saya tidak tahu. Saya lebih memilih untuk mendapatkan nomor seri tetapi ... ini adalah UUID dari sistem file 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 menghargainya - selalu dapat belajar sesuatu. Dan saya sadar saya sedang mencampur hal-hal - 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).

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

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


0
2018-03-24 01:11