Soru Bir dosya sisteminin UUID'sini nasıl bulabilirim?


Ubuntu'yu çalıştırıyorum ve öğrenmek istiyorum. UUID Belirli bir dosya sisteminin (bölüm değil). Biliyorum kullanabiliyorum e2label /dev/sda1 dosya sistemi etiketini bulmak için, ancak bulmak için benzer bir yol var gibi görünmüyor UUID.


115
2018-05-02 15:47


Menşei


Bütün cevaplar için teşekkürler, hepsini farklı durumlarda kullanacağımdan eminim. - Brad Gilbert
Başlığın, "Bir bölümün UUID'sini nasıl bulabilirim" şeklinde kullanıldığını unutmayın. Bu soru sadece bir GPT bölüm tablosu kullanırken anlamlıdır. İşte bu soruya bir cevap. - Alastair Irvine


Cevaplar:


Mevcut olabilecek ve bu konuda oldukça iyi çalışan başka bir komut 'blkid'. E2fsprogs paketinin bir parçası. Kullanım örnekleri:

/ Dev / sda1'deki verilere bakın:

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 daha kolay okunan formatta göster: (Not: daha yeni sürümlerde, blkid -L farklı bir anlamı vardır, ve blkid -o list bunun 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

/ Dev / sda1 için sadece UUID'yi ve başka hiçbir şeyi göster:

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

146
2018-05-04 19:11



Ubuntu bilgisayarımda sudo kullanmam gerekmiyor. - Brad Gilbert
Sadece yazarak blkid, tam olarak istediğimi aldım, ama tam olarak istediğim şeyi değil. (Yine de kabul ediyorum çünkü çoğu zaman kullanacağımdan eminim) - Brad Gilbert
Ubuntu'nun daha yeni sürümlerinde eşdeğer komut blkid -L şimdi blkid -o list; -L seçeneği olarak değiştirildi -L label belirtilen etiketi kullanan bir cihaza bakmak. - aculich
@aculich Son sözdizimini içerecek şekilde cevabı güncelledim blkid. Bahsettiğin için teşekkürler. - Christopher Cashell
Mükemmel, hiç bilemedim blkid; Ben her zaman yaptım ls -l /dev/disk/by-uuid. Gentoo'da, blkid içinde sys-apps/util-linux - AdmiralNemo


Sadece GPT Bölünmüş Diskler İçin

GPT biçimlendirilmiş bir diskte her bölüme, muhtemelen orijinal posterin atıfta bulunmadığı bir UUID biçimi olan bir GUID atanır. Bu nedenle, bu cevap orijinal sorgulayıcıya muhtemelen daha az yardımcı olur. Yine de fark edilmek için önemli bir ayrım olduğuna inanıyorum.

Bölüm 1'in GUID'sini GPT biçimlendirilmiş disk / dev / sda'nın yanı sıra bölüm etiketine ve benzeri şekilde almak için:

sudo sgdisk -i 1 /dev/sda

ya da hepsi:

ls -l /dev/disk/by-partuuid

Belirli bir bölümdeki dosya sisteminin köküyle önyükleme yapmak için linux kernel parametre sözdizimini kullanırsınız:

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

Bu durumda UUID'nin sadece başlangıcını belirtebilirsiniz - benzersiz olması için yeterli. Bu parametre daha ilkeldir ve önyükleme işleminde daha önce çekirdek tarafından anlaşılabilir.


Bunlar arasında semantik bir fark var:

Bir disk bölümleri tutar, bir bölüm bir dosya sistemi tutar, bir 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, bölümün içeriğini değil, bir bölümü ifade eder. Aynı diskteki yeni bir bölüm veya yeni bir diskteki bir bölümün yeni bir GUID UUID'si olacaktır. Aynı bölüm farklı bir günde bir dosya sistemini bir günde ve başka bir yerde tutabilir. Yalnızca GPT formatlı diskler için var, ancak eski bölümlenmiş diskler için değil. Burada belirtmekten genellikle daha fazla yarar yok root=/dev/sda1 veya root=8:1.

Diğer mevcut cevaplar UUID’nin dosya sistemi bazı bölümlerde. 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 sistemi bulmakta yararlı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.

inanıyorum root=LABEL= ve root=UUID= önceki kullanıcı tarafından başlatılan, benim sistemimde geçen gün gördüğüm init kodu bu parametreleri / dev / disk / by-uuid ve / dev / disk / by-etiketine çevirdim (linkler udev tarafından kullanıcı alanında oluşturulduğuna inanıyorum) sistemi).

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


9
2018-06-23 21:55



Doğru kullanım görünüyor -i1 veya -i 1, aksine -i:1sgdisk 1.0.1 ile. - Charles Duffy
@CharlesDuffy Bu hatayı bulmak için teşekkürler. Düzeltmek için cevabı düzenledim. - John S Gruber


Bunu ext2 / ext3 / ext4 için yapmanın en kolay yolu:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



Bu, dosya sisteminizin ext2, ext3 veya ext4 olarak biçimlendirilmiş olması koşuluyla çalışacaktır. Çoğu dosya sistemi bunlardan biri ama hepsi değil. Ayrıca takas bölümleri için çalışmayacaktır. Evrensel bir yol için cevabımı görün. - Hamish Downer
Bu benim durumumla sonuçlandı Couldn't find valid filesystem superblock. - Michel


Bunu yapmak için önerilen yol yapmaktır

sudo vol_id -u /dev/sda2

UUID'leri kullanma hakkında daha fazla bilgi için bkz. Bu makale (ubuntu'dan yardım, ancak UUID'leri kullanarak herhangi bir Linux dağıtımında çalışmalı).

Bu soruya yapılan yorumlarda belirtildiği gibi, vol_id sizin yolunuzda olmayabilir. Ubuntu'da / sbin'de olduğu için yukarıdakiler çalışı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 içeriyorsa, bir yorum gönderin ve bu cevabı ekleyeceğim.


3
2018-05-02 16:53



Bu, Fedora 10 dizüstü bilgisayarımda çalışmıyor. - Eddie
Bu benimkinden çok daha iyi bir çözüm. Eddie, vol_id / lib / udev'de bulunur. mish, cevabınızı vol_id'in önündeki tam yolun önüne ekleyebilir misiniz? / lib / udev, farkında olduğum herhangi bir dağıtımda varsayılan olarak root'un yolunda değil. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" çalışıyor görünüyor. Az sayıda insan yollarında / lib / udev olacaktır. - Eddie
Ubuntu bilgisayarımda, simgesel bir bağlantı var. /sbin/vol_id için /lib/udev/vol_id - Brad Gilbert
vol_id Ubuntu'dan Karmik'ten (9.10) itibaren düşmüştür, bu yüzden artık yararlı veya alakalı değildir. Oraya ulaşmak için birçok çarpıklıktan geçti. vol_id yerine koymak için bir noktada yapıldı blkid. - Alain O'Dea


UUID'yi sda1 için 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, grevleri ve kesintileri bırakın, bir 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: Bu çözüm, udev-> vol_id birinden daha fazla olsa da, unutmayın değil root ayrıcalıklarına gereksinim duyar, herhangi bir post-2005 veya çekirdek üzerinde çalışır ve herhangi bir kullanıcı için varsayılan olarak herhangi bir Linux dağıtımında bulunan araçlara dayanır.


2
2018-05-02 16:22



Bu, yeni yeteri kadar devfs çalıştıran herhangi bir bilgisayarda çalışacaktır. - Eddie


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

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





Tüm UUID'leri yazdırmak için bunu da kullanabilirsiniz:

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

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

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 bir uyarlaması:

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

1
2017-11-30 23:09





Herhangi bir dosya sistemi üzerinde çalışan betiğin temiz yolu şu şekildedir:

lsblk -no UUID <device-containing-FS>

Veya, mountpoint (veya içindeki herhangi bir dosya) göz önüne alındığında:

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
2017-12-30 13:29





Belirli bir sürücü için UUID almak için aşağıdakileri kullanabilirsiniz.

sudo vol_id -u /dev/sda1

veya ekli medya için tüm UUID'leri listelemek için bunu kullanabilirsiniz.

ls /dev/disk/by-uuid

0
2018-05-02 17:24



Ubuntu 9.10 itibariyle artık geçerli değil vol_id Kaldırıldı. - Alain O'Dea


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

Yukarıdakiler, uzun yıllardan beri Linux sistemlerinde çalışıyor. Kusurları olabilir, bilmiyorum. Seri numarasını almayı tercih ederim ama ... bu kök dosya sisteminin UUID'sidir.

Eğer herhangi bir kimsenin root olarak (benimki gibi) olmaksızın seri numarasını elde etmek için bir yolu varsa ve Unix'in farklı sürümlerinde farklı olan "olağandışı" paketleri yüklemediyse bunu takdir ederim - her zaman bir şeyler öğrenebilir. Ve bir şeyleri karıştırdığımı bildiğim - bir dosya değil, kök dosya sistemi UUID.

BTW'nin amacı, her makine için değiştirilemeyen (disk seri numarası ve bir zamanlar çok uzun zaman önce MAC adresleri gibi) benzersiz bir sayı üretmektir.

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

AIX'de, makineyi tanımlayan bir numara almak için tek bir çağrı vardır. Donanım değişiklikleri veya yazılım güncellemelerinin gerçekleşmesi umrumda değil, bu yüzden nasıl yaptıklarını bilmiyorum. Eğer anakart değişirse, o zaman rakam değişir, o yüzden orada saklarlar. Ve bu nadiren ötesindedir.


0
2018-03-24 01:11