it-swarm-tr.com

Bir dosya sisteminin UUID'sini nasıl bulurum

Ubuntu çalıştırıyorum ve UUID belirli bir dosya sisteminin (bölüm değil) bulmak istiyorum. Kullanabileceğimi biliyorum e2label /dev/sda1 dosya sistemi etiketini bulmak için, ancak UUID öğesini bulmanın benzer bir yolu yok gibi görünüyor.

135
Brad Gilbert

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

/ Dev/sda1 ile ilgili verileri arayın:

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

[email protected]:~$ 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 daha kolay okunabilir biçimde gösterin: (Not: daha yeni sürümlerde, blkid -L farklı bir anlama sahiptir ve blkid -o list yerine kullanılmalıdır)

[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

/ Dev/sda1 için yalnızca UUID'yi göster ve başka bir şey göster:

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

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

GPT biçimli bir diskte her bölüme, muhtemelen orijinal posterin bahsettiği şey olmasa da, bir UUID biçimi olan bir GUID verilir. Bu nedenle, bu cevap muhtemelen orijinal soru soran kişiye daha az yardımcı olacaktır. Yine de dikkat edilmesi gereken önemli bir ayrım var.

GPT biçimli disk/dev/sda'daki bölüm 1'in GUID bölümünün yanı sıra bölüm etiketini vb.) Almak için:

Sudo sgdisk -i 1 /dev/sda

ya da hepsi ile:

ls -l /dev/disk/by-partuuid

Belirli bir bölümdeki dosya sisteminin kökü ile önyükleme yapmak için aşağıdakilerin linux çekirdek parametresi sözdizimini kullanırsınız:

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

Bu durumda, benzersiz olmak için yeterli olan UUID'nin sadece başlangıcını belirtebilirsiniz. Bu parametre daha ilkeldir ve önyükleme işleminin başlarında çekirdek tarafından anlaşılabilir.


Bunlar arasında anlambilimde bir fark vardır:

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

GUID UUID ve ilişkili etiket bir bölüme başvuruyor, ancak bölümün içeriğini değil. Aynı diskteki yeni bir bölüm veya yeni bir diskteki bölüm yeni bir GUID UUID: Aynı bölüm, bir gün ve diğeri farklı bir günde bir dosya sistemini tutabilir. Yalnızca GPT biçimli diskler için vardır, ancak eski bölümlenmiş diskler için yoktur. Burada root=/dev/sda1 veya root=8:1.

Diğer mevcut yanıtlar, bir kısım içeren bir bölümdeki dosya sistemi UUID'sine aittir. 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 bulmak için kullanışlıdır. Bu nedenle bu muhtemelen çoğu insan için daha uygundur. Linux çekirdek parametresi root=UUID=87654321-4321-4321-a567-123456789012 bunu ifade eder.

İnanıyorum root=LABEL= ve root=UUID= erken kullanıcı alanı tarafından uygulanır, sistemimde geçen gün gördüğüm init kodu bu parametreleri/dev/disk/by-uuid ve/dev/disk/by-label'a çevirdi (kullanıcı alanında udev tarafından oluşturulduğuna inandığım bağlantılar benim sistemimde).

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

11
John S Gruber

Herhangi bir dosya sisteminde çalışan komut dosyası temizleme yolu:

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ğildir.

8
Tom Hale

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

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

Bunu yapmanın önerilen yolu,

Sudo vol_id -u /dev/sda2

UUID'leri kullanma hakkında daha fazla bilgi için bkz. bu makale (ubuntu yardımından, ancak UUID'leri kullanan herhangi bir linux dağıtımı için çalışmalıdır).

Bu soruya yapılan yorumlarda belirtildiği gibi, vol_id yolunuzda olmayabilir. Ubuntu üzerinde/sbin içinde yani yukarıdaki çalışır. Fedora için ihtiyaç var gibi görünüyor

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

Diğer dağıtımlarda başka yerlerde vol_id varsa yorum gönderirseniz bu yanıta eklerim.

3
Hamish Downer

Bu benim için işe yarıyor gibi görünüyor:

Sudo dumpe2fs /dev/sda1 | grep UUID
3

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 buna göre ayarlayın. Tüm bölümler için UUID'leri almak için, greps ve kesimleri bırakın, bir la:

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

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

[[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

Düzenleme: Bu çözüm, udev-> vol_id olandan daha tutarlı olsa da, değil kök ayrıcalıkları gerektirdiğini, 2005 sonrası herhangi bir çekirdek üzerinde çalışacağını ve mevcut araçlara dayandığını unutmayın. Herhangi bir kullanıcı için varsayılan yol olan Linux dağıtımı.

2

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

veya bu tartışmasız daha basit komut, sda1 aramak istediğiniz cihazla:

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
kiri
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

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

Herkes kök (benim gibi) olması gerekmeden seri numarasını almak için bir yol varsa ve Unix farklı sürümlerinde farklı "sıradışı" paketleri yüklemeden varsa ben takdir ediyorum - her zaman bir şeyler öğrenebilirsiniz. Ve bir şeyleri karıştırdığımı biliyorum - kök dosya sistemi UUID, bir disk değil.

Amaç, BTW, makine başına değiştirilemeyen benzersiz bir sayı üretmektir (bir disk seri numarası ve bir zamanlar MAC adresleri gibi).

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

AIX'te makineyi tanımlayan bir numara almak için tek bir çağrı vardır. Donanım değişiklikleri veya yazılım güncellemeleri olup olmadığını umursamıyor, bu yüzden nasıl yaptıklarına dair hiçbir fikrim yok ... Anakart değişirse, sayı değişir, bu yüzden orada sakladıklarını düşünüyorum. Ve bu nadirin ötesinde.

1
Eric Eberhard

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

Sudo vol_id -u /dev/sda1

veya bağlı ortam için tüm UUID'leri listelemek için bunu kullanabilirsiniz,

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