मैं एक फाइलसिस्टम का UUID कैसे ढूँढूँ?


133

मैं उबंटू चला रहा हूं, और UUIDएक विशेष फाइल सिस्टम (विभाजन नहीं) का पता लगाना चाहता हूं । मुझे पता है कि मैं e2label /dev/sda1फाइलसिस्टम लेबल का पता लगाने के लिए उपयोग कर सकता हूं , लेकिन इसे खोजने के लिए एक समान तरीका प्रतीत नहीं होता है UUID


सभी उत्तरों के लिए धन्यवाद, मुझे यकीन है कि मैं उन सभी का विभिन्न परिस्थितियों में उपयोग करूंगा।
ब्रैड गिल्बर्ट

2
ध्यान दें कि शीर्षक "मैं एक विभाजन का यूयूआईडी कैसे ढूंढूं" हुआ करता था। यह सवाल केवल एक GPT विभाजन तालिका का उपयोग करते समय समझ में आता है। यहाँ उस सवाल का जवाब है
एलेस्टेयर इर्विन

जवाबों:


164

एक अन्य आदेश जो उपलब्ध हो सकता है और इसके लिए काफी अच्छा काम करता है वह है 'ब्लकिड'। यह e2fsprogs पैकेज का हिस्सा है। इसके उपयोग के उदाहरण:

/ Dev / sda1 पर डेटा देखें:

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

सभी विभाजनों के लिए UUID डेटा दिखाएं:

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

प्रारूप को पढ़ने के लिए आसान सभी विभाजनों के लिए UUID डेटा दिखाएं: (नोट: नए रिलीज में, blkid -Lएक अलग अर्थ है, और blkid -o listइसके बजाय इसका उपयोग किया जाना चाहिए)

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

केवल यूयूआईडी / देव / sda1 के लिए दिखाएं और कुछ नहीं:

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

1
मेरे Ubuntu कंप्यूटर पर, मुझे sudo का उपयोग करने की आवश्यकता नहीं है।
ब्रैड गिल्बर्ट

बस टाइपिंग blkid, मुझे वही मिला जो मैं चाहता था, लेकिन काफी नहीं जो मैंने पूछा। (मैं इसे वैसे भी स्वीकार कर रहा हूं, क्योंकि मुझे यकीन है कि मैं इसे अक्सर उपयोग करूंगा)
ब्रैड गिल्बर्ट

3
उबंटू के नए संस्करणों पर blkid -Lअभी के लिए समकक्ष कमांड है blkid -o list; -Lविकल्प के लिए बदल दिया गया है -L labelएक डिवाइस निर्दिष्ट लेबल का उपयोग करता है को देखने के लिए।
3

@aculich मैंने हाल ही के सिंटैक्स को शामिल करने के लिए उत्तर अपडेट किया है blkid। इसका उल्लेख करने के लिए धन्यवाद।
क्रिस्टोफर कैशेल

2
बहुत बढ़िया, मैं कभी नहीं जानता था blkid; मैंने हमेशा बस किया है ls -l /dev/disk/by-uuidblkidsys-apps/util-linux
जेंटू

10

केवल GPT विभाजन के लिए डिस्क

GPT स्वरूपित डिस्क पर प्रत्येक विभाजन को एक GUID दिया जाता है, जो कि UUID का एक रूप है, हालांकि संभवतः ऐसा नहीं है कि मूल पोस्टर किसका उल्लेख कर रहा था। इसलिए यह उत्तर मूल प्रश्नकर्ता के लिए शायद कम मददगार है। फिर भी मेरा मानना ​​है कि देखा जाना एक महत्वपूर्ण अंतर है।

GPT स्वरूपित डिस्क / dev / sda पर विभाजन 1 के GUID को प्राप्त करने के लिए, साथ ही साथ इसके विभाजन लेबल और इसी तरह:

sudo sgdisk -i 1 /dev/sda

या सभी के साथ:

ls -l /dev/disk/by-partuuid

एक निश्चित विभाजन पर फ़ाइल सिस्टम की जड़ के साथ बूट करने के लिए आप लिनक्स कर्नेल पैरामीटर सिंटैक्स का उपयोग करेंगे:

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

इस मामले में आप यूयूआईडी की शुरुआत को निर्दिष्ट कर सकते हैं - अद्वितीय होने के लिए पर्याप्त है। यह पैरामीटर अधिक आदिम है और इसकी बूट प्रक्रिया में पहले कर्नेल द्वारा समझा जा सकता है।


इनके बीच शब्दार्थ में अंतर है:

एक डिस्क में विभाजन होता है, एक विभाजन एक फाइल सिस्टम रखता है, एक फाइल सिस्टम निर्देशिका और फाइलें रखता है। कुछ सेट-अप और ऑपरेटिंग सिस्टम के लिए अधिक परतें हैं।

GUID UUID और संबद्ध लेबल एक विभाजन को संदर्भित करता है, लेकिन विभाजन की सामग्री को नहीं। एक ही डिस्क पर एक नया विभाजन, या एक नई डिस्क पर एक विभाजन में एक नया GUID UUID होगा। एक ही विभाजन एक फ़ाइल सिस्टम को एक दिन और दूसरे को अलग दिन पर पकड़ सकता है। यह केवल GPT स्वरूपित डिस्क के लिए मौजूद है, लेकिन विरासत विभाजन डिस्क के लिए नहीं। आमतौर पर यहाँ निर्दिष्ट करने की तुलना में अधिक उपयोगिता नहीं है root=/dev/sda1या root=8:1

अन्य वर्तमान उत्तर कुछ विभाजन वाले फ़ाइल सिस्टम के UUID को संदर्भित करते हैं । यदि फ़ाइल सिस्टम की प्रतिलिपि बनाई जाती है, तो एक संपूर्ण के रूप में, दूसरे विभाजन या हार्ड डिस्क के लिए जो मान समान रहता है। यह UUID एक स्थानांतरित फ़ाइल सिस्टम खोजने में उपयोगी है। इसलिए यह शायद ज्यादातर लोगों के लिए अधिक प्रासंगिक है। लिनक्स कर्नेल पैरामीटर इसे root=UUID=87654321-4321-4321-a567-123456789012संदर्भित करता है।

मैं मानता हूं root=LABEL=और root=UUID=शुरुआती यूजर्स द्वारा लागू किया जाता है, मेरे द्वारा मेरे सिस्टम पर दूसरे दिन देखे गए इन कोड को इन मापदंडों को / dev / disk / by-uuid और / dev / डिस्क / बाय-लेबल से लिंक किया जाता है (मुझे लगता है कि udev द्वारा बनाए गए लिंक हैं) मेरे सिस्टम पर userspace)।

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


सही उपयोग sgdisk 1.0.1 के साथ , के रूप में -i1या -i 1, प्रतीत होता है -i:1
चार्ल्स डफी

@CharlesDuffy उस त्रुटि को खोजने के लिए धन्यवाद। मैंने इसका उत्तर सही करने के लिए संपादित किया है।
जॉन एस ग्रुबर

7

स्क्रिप्ट-क्लीन तरीका यह करने के लिए जो किसी भी प्रकार के फाइल सिस्टम पर काम करता है:

lsblk -no UUID <device-containing-FS>

या, माउंटपॉइंट (या इसके भीतर कोई फ़ाइल) दिया गया:

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

आउटपुट UUID, संपूर्ण UUID और कुछ नहीं बल्कि UUID है।


1
यह blkid@ क्रिस्टोफर-केसहेल के उत्तर से बेहतर है , क्योंकि आपको रूट बनने की आवश्यकता नहीं है। एक माउंट बिंदु या बेहतर फ़ाइल के लिए lsblk -no UUID $(findmnt -n -o SOURCE --target <file>):।
marcz

@marcz जो कि btrfs सबवूम्स पर विफल रहता है: findmnt -n -o SOURCE --target ~देता है:/dev/mapper/vg_svelte-home[/@home]
टॉम हेल

दाएं @ टॉम-हेल, lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)उपस्थित होने पर सबवोल्यूम से छुटकारा पाना चाहिए।
marcz

5

Ext2 / ext3 / ext4 के लिए ऐसा करने का सबसे आसान तरीका है:

/sbin/tune2fs -l /dev/sda1

3
यह काम करेगा बशर्ते आपका फाइल सिस्टम ext2, ext3 या ext4 के रूप में स्वरूपित हो। अधिकांश फाइलसिस्टम इनमें से एक हैं, लेकिन सभी नहीं। यह स्वैप विभाजन के लिए भी काम नहीं करेगा। सार्वभौमिक तरीके से मेरा उत्तर देखें।
हामिश डाउनर

यह मेरे मामले में परिणाम देता हैCouldn't find valid filesystem superblock.
मिशेल

3

ऐसा करने के लिए अनुशंसित तरीका है

sudo vol_id -u /dev/sda2

UUIDs का उपयोग करने के बारे में अधिक जानकारी के लिए, यह लेख देखें (ubuntu help से, लेकिन UUIDs का उपयोग करके किसी भी linux distro के लिए काम करना चाहिए)।

जैसा कि इस प्रश्न की टिप्पणियों में बताया गया है, vol_id आपके रास्ते में नहीं हो सकता है। Ubuntu पर यह / sbin में है इसलिए ऊपर काम करेगा। फेडोरा के लिए इसकी जरूरत प्रतीत होती है

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

यदि अन्य वितरणों में अन्य स्थानों पर vol_id है तो एक टिप्पणी पोस्ट करें और मैं इसे इस उत्तर में जोड़ दूंगा।


यह मेरे फेडोरा 10 लैपटॉप पर काम नहीं करता है।
एडी

यह मेरी तुलना में बहुत बेहतर उपाय है। एडी, vol_id / lib / udev में स्थित है। mish, क्या आप vol_id के सामने पूर्ण पथ को उपसर्ग करने के लिए अपना उत्तर संपादित कर सकते हैं? / lib / udev मूल रूप से किसी भी वितरण पर रूट के पथ में नहीं है, जिसके बारे में मुझे पता है।
Mihai Limbăşan

"" lib / udev / vol_id / dev / sda2 "काम करता प्रतीत होता है। कुछ लोगों को अपने रास्ते में / परिवाद / udv होगा।
एडी

मेरे उबंटू कंप्यूटर पर एक प्रतीकात्मक लिंक /sbin/vol_idहै/lib/udev/vol_id
ब्रैड गिल्बर्ट

4
Vol_id को कार्मिक (9.10) के रूप में उबंटू से हटा दिया गया है इसलिए अब उपयोगी या प्रासंगिक नहीं है। यह contortions का एक बहुत वहाँ पाने के रूप में माध्यम से चला गया vol_id को बदलने के लिए बनाया गया एक समय पर blkid
Alain O'Dea


2

यह मानकर कि आप sU1 के लिए UUID चाहते हैं, आप कुछ इस तरह की कोशिश कर सकते हैं:

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

तदनुसार sda1 समायोजित करें। सभी विभाजनों के लिए UUIDs प्राप्त करने के लिए, greps और कट छोड़ें, a la:

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

मेरे डेस्कटॉप पर sda1 के लिए नमूना आउटपुट:

[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

संपादित करें: कृपया ध्यान दें कि यह समाधान, udv-> vol_id एक से अधिक होने के बावजूद, रूट विशेषाधिकारों की आवश्यकता नहीं है, किसी भी 2005 के बाद या इतने कर्नेल पर काम करेगा, और किसी भी लिनक्स वितरण में मौजूद उपकरणों पर निर्भर करता है जो डिफ़ॉल्ट रूप से होते हैं। किसी भी उपयोगकर्ता के लिए पथ।


यह किसी भी कंप्यूटर पर हाल ही में पर्याप्त devfs चलाने पर काम करेगा।
एडी

1

आप इसका उपयोग सभी यूयूआईडी को प्रिंट करने के लिए भी कर सकते हैं:

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

या यह निश्चित रूप से सरल कमांड, sda1उस डिवाइस से प्रतिस्थापित करना जिसे आप खोजना चाहते हैं:

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

सभी UUIDs को मुद्रित करने के लिए दूसरी विधि का एक रूपांतरण:

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}'

ऊपर कई वर्षों में सबसे अधिक (सभी मुझे मिला है) लिनक्स सिस्टम पर काम करने लगता है। इसमें खामियां हो सकती हैं, मुझे नहीं पता। मैं सीरियल नंबर प्राप्त करना पसंद करूंगा लेकिन ... यह रूट फाइल सिस्टम का UUID है।

अगर किसी के पास रूट होने की आवश्यकता के बिना सीरियल नंबर प्राप्त करने का एक तरीका है (जैसा कि मेरा है) और "असामान्य" पैकेज स्थापित नहीं करना चाहिए जो कि यूनिक्स के विभिन्न संस्करणों में अलग हैं मैं इसकी सराहना करता हूं - हमेशा कुछ सीख सकते हैं। और मुझे पता है कि मैं चीजों को मिला रहा हूं - रूट फाइल सिस्टम यूयूआईडी है, डिस्क नहीं।

उद्देश्य, बीटीडब्ल्यू, एक अद्वितीय संख्या प्रति मशीन उत्पन्न करना है जिसे संशोधित नहीं किया जा सकता है (जैसे डिस्क क्रम संख्या और एक बार लंबे समय तक मैक पते की तरह)।

इसका उपयोग किसी एक मशीन में सॉफ्टवेयर की एन्कोडिंग के लिए किया जाता है। मैक एड्रेस तब तक ठीक था जब तक वे उन्हें आभासी होने की अनुमति नहीं देते ... कुछ सुस्त ग्राहकों ने अपने मैक पते को एक स्थिर (निश्चित रूप से अलग-अलग नेटवर्क पर) सेट किया है और मुझे भुगतान करने से परहेज किया है।

AIX में एक नंबर पर कॉल करने के लिए एक ही कॉल आती है जो मशीन को पहचानती है। अगर हार्डवेयर में बदलाव या सॉफ्टवेयर अपडेट होता है तो मुझे इसकी कोई परवाह नहीं है इसलिए मुझे नहीं पता कि वे इसे कैसे करते हैं ... अगर मदरबोर्ड बदलता है, तो नंबर बदल जाता है, इसलिए मुझे लगता है कि वे इसे वहीं छिपा देते हैं। और वह दुर्लभ से परे है।


0

आप किसी विशेष ड्राइव के लिए UUID प्राप्त करने के लिए निम्नलिखित का उपयोग कर सकते हैं,

sudo vol_id -u /dev/sda1

या आप संलग्न मीडिया के लिए सभी यूयूआईडी को सूचीबद्ध करने के लिए इसका उपयोग कर सकते हैं,

ls /dev/disk/by-uuid

उबंटू 9.10 के रूप में अब लागू नहीं है क्योंकि vol_id को हटा दिया गया है।
Alain O'Dea
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.