Bir dosya sisteminin UUID'sini nasıl bulurum


133

Ubuntu kullanıyorum ve UUIDbelirli bir dosya sistemini bulmak istiyorum (bölüm değil). e2label /dev/sda1Dosya sistemi etiketini bulmak için kullanabileceğimi biliyorum , ancak bulmak için benzer bir yol yok gibi görünüyor UUID.


Tüm cevaplar için teşekkürler, hepsini farklı koşullarda kullanacağımdan eminim.
Brad Gilbert,

2
Başlığın "Bir bölümün UUID'sini nasıl bulabilirim" olduğunu unutmayın. Bu soru yalnızca bir GPT bölüm tablosu kullanırken anlamlıdır. İşte bu sorunun cevabı .
Alastair Irvine

Yanıtlar:


164

Kullanılabilecek ve bunun için oldukça iyi çalışan bir başka komut 'blkid'. E2fsprogs paketinin bir parçası. Kullanımına örnekler:

/ Dev / sda1'deki verilere bakınız:

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

Tüm bölümler için UUID verilerini göster:

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

Tüm bölümler için UUID verilerini okunması kolay bir biçimde gösterin: (Not: daha yeni sürümlerde, blkid -Lfarklı bir anlama gelir ve blkid -o listbunun yerine kullanılmalıdır)

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

Yalnızca / dev / sda1 için UUID'yi ve başka hiçbir şeyi gösterme:

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

1
Ubuntu bilgisayarımda sudo kullanmama gerek yok.
Brad Gilbert,

Sadece yazarak blkid, tam olarak istediğimi aldım, ama istediğim şeyi değil. (Yine de kabul ediyorum, çünkü sık kullanacağımdan eminim)
Brad Gilbert

3
Ubuntu'nun yeni sürümlerinde eşdeğer komut blkid -Lşudur blkid -o list; -Lseçenek olarak değiştirildi -L labelbelirtilen etiket kullanan bir cihaz bakmak için.
aculich,

@ aculich Yanıtını, son sözdizimini içerecek şekilde güncelledim blkid. Bahsettiğin için teşekkürler.
Christopher Cashell

2
Mükemmel, hiç bilmediğim blkid; Ben her zaman yeni yaptım ls -l /dev/disk/by-uuid. Gentoo'da günü blkidolduğunusys-apps/util-linux
AdmiralNemo

10

Yalnızca GPT Bölümlenmiş Diskler İçin

GPT formatlı bir diskte her bölüme, muhtemelen asıl posterin bahsettiği gibi olmamakla birlikte, bir UUID şekli olan bir GUID atanır. Bu nedenle, bu cevap orijinal soru sorucu için muhtemelen daha az faydalıdır. Bununla birlikte, fark edilmesi gereken önemli bir ayrım olduğuna inanıyorum.

GPT formatlı diskte / dev / sda disk bölümünün 1'inin GUID'sini ve ayrıca bölüm etiketini vb. Almak için:

sudo sgdisk -i 1 /dev/sda

veya hepsi:

ls -l /dev/disk/by-partuuid

Belli bir bölümdeki dosya sisteminin kökü ile önyükleme yapmak için, linux kernel parametresi sözdizimini kullanırsınız:

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

Bu durumda, UUID’in yalnızca başlangıcını belirleyebilirsiniz - benzersiz olması için yeterli. Bu parametre daha ilkeldir ve çekirdek tarafından önyükleme işleminde daha önce anlaşılabilir.


Anlambilimde bunlar arasında bir fark var:

Bir disk bölümleri tutar, bölüm dosya sistemini tutar, dosya sistemi dizinleri ve dosyaları tutar. Bazı kurulumlar ve işletim sistemleri için daha fazla katman var.

GUID UUID ve ilişkili etiket, bir bölüme atıfta bulunur, ancak bölümün içeriğini ifade etmez. Aynı diskteki yeni bir bölüm veya yeni bir diskteki bölüm yeni bir GUID UUID değerine sahip olacaktır. Aynı bölüm bir gün bir dosya sistemini başka bir gün başka bir gün tutabilir. Yalnızca GPT biçimli diskler için bulunur, ancak eski bölümlenmiş diskler için yoktur. Burada root=/dev/sda1veya belirtmekten daha fazla fayda yoktur root=8:1.

Diğer güncel cevaplar , bazı bölümleri içeren bir dosya sisteminin UUID'sine karşılık gelir . Dosya sistemi bir bütün olarak başka bir bölüme veya sabit diske kopyalanırsa, bu değer aynı kalır. Bu UUID, taşınan bir dosya sistemini bulmakta kullanışlıdır. Bu nedenle bu muhtemelen çoğu insan için daha uygundur. Linux çekirdek parametresi buna root=UUID=87654321-4321-4321-a567-123456789012karşılık gelir.

İnanıyorum root=LABEL=ve root=UUID=daha önceki kullanıcılar tarafından uygulanıyor, sistemimde geçen gün gördüğüm init kodu, bu parametreleri / dev / disk / by-uuid ve / dev / disk / by-label'a (udev tarafından yaratıldığına inanıyorum) çevirdi. sistemimdeki userpace).

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


Doğru kullanım , -i1ya -i 1da aksine -i:1, sgdisk 1.0.1 ile görünmektedir.
Charles Duffy

@ CharlesDuffy bu hatayı bulmak için teşekkür ederiz. Düzeltmek için cevabı değiştirdim.
John S Gruber

7

Her tür dosya sisteminde çalışan bunu yapmanın komut dosyası temizleme yöntemi:

lsblk -no UUID <device-containing-FS>

Veya, bağlama noktası (veya içindeki herhangi bir dosya) verildiğinde:

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

Çıktı UUID, tüm UUID ve UUID'den başka bir şey değil.


1
Bu blkid, @ christopher-cashell'in cevabından daha iyi çünkü kök olmanıza gerek yok. Bağlama noktası veya bir dosya için daha iyisini: lsblk -no UUID $(findmnt -n -o SOURCE --target <file>).
marcz

btrfs alt hacimlerinde başarısız olan @marcz: şunu findmnt -n -o SOURCE --target ~veriyor:/dev/mapper/vg_svelte-home[/@home]
Tom Hale

Doğru @ tom-hale, lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)mevcut olduğunda alt hacimden kurtulmalıdır.
marcz

5

Ext2 / ext3 / ext4 için bunu yapmanın en kolay yolu:

/sbin/tune2fs -l /dev/sda1

3
Bu, dosya sisteminizin ext2, ext3 veya ext4 olarak biçimlendirilmesi koşuluyla çalışır. Çoğu dosya sistemi bunlardan biridir fakat hepsinden değil. Ayrıca takas bölümleri için çalışmaz. Evrensel bir yol için cevabımı görün.
Hamish Downer

Bu benim Couldn't find valid filesystem superblock.
Michel

3

Bunu yapmanın önerilen yolu

sudo vol_id -u /dev/sda2

UUID'leri kullanma hakkında daha fazla bilgi için bu makaleye bakın (ubuntu yardımından, ancak UUID'leri kullanan tüm Linux dağıtımı için çalışmalıdır).

Bu soruya yorumlarda belirtildiği gibi vol_id senin yolunda olmayabilir. Ubuntu'da / sbin içinde olduğundan yukarıdakiler çalışacaktır. Fedora için ihtiyacı var gibi görünüyor

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

Diğer dağıtımlar başka yerlerde vol_id varsa, bir yorum gönderin ve ben bu cevaba ekleyeyim.


Bu, Fedora 10 dizüstü bilgisayarımda çalışmıyor.
Eddie,

Bu benimkinden çok daha iyi bir çözüm. Eddie, vol_id / lib / udev konumunda. mish, cevabınızı vol_id'in önündeki tam yolu öneklemek için düzenler misiniz? / lib / udev, bildiğim herhangi bir dağıtımda varsayılan olarak kök yolunda değil.
Mihai Limbăşan

"/ lib / udev / vol_id / dev / sda2" çalışması görünüyor. Çok az insan yolunda / lib / udev'a sahip olacak.
Eddie,

Benim Ubuntu bilgisayarda sembolik bir bağ olduğunu /sbin/vol_idiçin/lib/udev/vol_id
Brad Gilbert

4
volmic , Karmic'ten (9.10) itibaren Ubuntu'dan düşürüldü, bu yüzden artık yararlı değil. Vol_id blkid yerine bir noktada yapıldığı için oraya bir çok engel girdi .
Alain O'Dea


2

Sda1 için UUID'yi istediğinizi varsayarsak, şöyle bir şey deneyebilirsiniz:

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

Sda1'i uygun şekilde ayarlayın. Tüm bölümler için UUID'leri almak için, sıyrıkları ve kesimleri, a la:

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

Masaüstümde sda1 için örnek çıktı:

[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

Düzenleme: Lütfen bu çözümün udev-> vol_id ile karşılaştırıldığında daha köklü olmasına rağmen , kök ayrıcalıkları gerektirmediğini, 2005 sonrası herhangi bir çekirdeğin üzerinde çalışacağını ve herhangi bir Linux dağıtımında bulunan ve varsayılan olarak varsayılan olan araçlara dayandığını unutmayın. herhangi bir kullanıcı için yol.


Bu, yeterince yeni bir devfs çalıştıran herhangi bir bilgisayarda çalışır.
Eddie

1

Bunu, tüm UUID'leri yazdırmak için de kullanabilirsiniz:

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

ya da bu tartışmasız daha basit bir komut, sda1aramak istediğiniz aygıtla değiştirerek :

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

tüm UUID'leri yazdırmak için ikinci yöntemin uyarlanması:

find /dev/disk/by-uuid -type l -exec sh -c 'basename $(readlink {}); basename {}; echo' \;

1
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

Yukarıdakiler, uzun yıllar boyunca çoğu (bulduklarımın tümü) Linux sistemleri üzerinde çalışıyor gibi görünüyor. Kusurları olabilir, bilmiyorum. Seri numarasını almayı tercih ederdim ama ... bu kök dosya sisteminin UUID'si.

Herhangi birinin seri numarayı root kullanmaya gerek kalmadan (benimki gibi) ve Unix'in farklı sürümlerinde farklı olan "sıradışı" paketleri yüklememesinin bir yolu varsa, minnettar olurum - her zaman bir şeyler öğrenebilirim. Ve bazı şeyleri karıştırdığımı biliyorum - bu bir disk değil, UUID kök dosya sistemidir.

BTW'nin amacı, makine başına değiştirilemeyen benzersiz bir sayı üretmektir (bir disk seri numarası ve bir zamanlar önceki MAC adresleri gibi).

Yazılımın tek bir makineye kodlanması için kullanılır. MAC adresleri sanal olmalarına izin verene kadar iyiydi ... bazı sleazy müşterileri MAC adreslerini sabit (elbette farklı ağlarda) olarak ayarladılar ve bana ödeme yapmaktan kaçındılar.

AIX'de, makineyi tanımlayan bir numara almak için tek bir çağrı var. Donanım değişikliklerinin veya yazılım güncellemelerinin gerçekleşmesi umrunda değil, bu yüzden nasıl yaptıkları hakkında hiçbir fikrim yok ... Anakart değişirse, o zaman sayı değişir, o yüzden orada sakladıklarını düşünüyorum. Ve bu nadirdir.


0

Belirli bir sürücünün UUID'sini almak için aşağıdakileri kullanabilirsiniz,

sudo vol_id -u /dev/sda1

veya ekli ortamdaki tüm UUID'leri listelemek için bunu kullanabilirsiniz,

ls /dev/disk/by-uuid

Vol_id kaldırıldığı için artık Ubuntu 9.10'dan itibaren geçerli değildir .
Alain O'Dea
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.