Ubuntu kullanıyorum ve UUID
belirli bir dosya sistemini bulmak istiyorum (bölüm değil). e2label /dev/sda1
Dosya sistemi etiketini bulmak için kullanabileceğimi biliyorum , ancak bulmak için benzer bir yol yok gibi görünüyor UUID
.
Ubuntu kullanıyorum ve UUID
belirli bir dosya sistemini bulmak istiyorum (bölüm değil). e2label /dev/sda1
Dosya sistemi etiketini bulmak için kullanabileceğimi biliyorum , ancak bulmak için benzer bir yol yok gibi görünüyor UUID
.
Yanıtlar:
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 -L
farklı bir anlama gelir 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
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
blkid
, tam olarak istediğimi aldım, ama istediğim şeyi değil. (Yine de kabul ediyorum, çünkü sık kullanacağımdan eminim)
blkid -L
şudur blkid -o list
; -L
seçenek olarak değiştirildi -L label
belirtilen etiket kullanan bir cihaz bakmak için.
blkid
. Bahsettiğin için teşekkürler.
blkid
; Ben her zaman yeni yaptım ls -l /dev/disk/by-uuid
. Gentoo'da günü blkid
olduğunusys-apps/util-linux
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/sda1
veya 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-123456789012
karşı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
-i1
ya -i 1
da aksine -i:1
, sgdisk 1.0.1 ile görünmektedir.
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.
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>)
.
findmnt -n -o SOURCE --target ~
veriyor:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
mevcut olduğunda alt hacimden kurtulmalıdır.
Ext2 / ext3 / ext4 için bunu yapmanın en kolay yolu:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
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.
/sbin/vol_id
için/lib/udev/vol_id
Bu benim için çalışıyor gibi görünüyor:
sudo dumpe2fs /dev/sda1 | grep UUID
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.
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, sda1
aramak 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' \;
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.
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