سؤال كيف يمكنني العثور على UUID لنظام الملفات


أنا أدير أوبونتو ، وأريد أن أعرف UUID من نظام ملفات معين (وليس التقسيم). وأنا أعلم أنني يمكن استخدامها e2label /dev/sda1 لمعرفة تسمية نظام الملفات ، ولكن لا يبدو أن هناك طريقة مشابهة للعثور على UUID.


115
2018-05-02 15:47


الأصل


شكرا لجميع الإجابات ، أنا متأكد من أنني سوف تستخدم كل منهم في ظروف مختلفة. - Brad Gilbert
لاحظ أن العنوان كان "كيف يمكنني العثور على UUID من قسم". هذا السؤال منطقي فقط عند استخدام جدول تقسيم GPT. وإليك إجابة على هذا السؤال. - Alastair Irvine


الأجوبة:


أمر آخر قد يكون متاحًا ويعمل أيضًا بشكل جيد لهذا هو "blkid". انها جزء من حزمة 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

إظهار فقط UUID لـ / dev / sda1 ولا شيء غير ذلك:

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

146
2018-05-04 19:11



على جهاز الكمبيوتر الخاص بي أوبونتو ، لست بحاجة إلى استخدام sudo. - Brad Gilbert
فقط أكتب blkidحصلني بالضبط على ما أردت ، ولكن ليس بالضبط ما طلبته. (أنا أقبله على أي حال ، لأنني متأكد من أنني سأستخدمه كثيرًا) - Brad Gilbert
في الإصدارات الأحدث من أوبونتو الأمر المكافئ لـ blkid -L هو الآن blkid -o list. ال -L تم تغيير الخيار ل -L label للبحث عن جهاز يستخدم التسمية المحددة. - aculich
aculich لقد قمت بتحديث الإجابة لتشمل الجملة الأخيرة ل blkid. شكرا على ذكر ذلك. - Christopher Cashell
ممتاز ، لم أكن أعلم أبدًا blkid. لقد فعلت دائما للتو ls -l /dev/disk/by-uuid. على جنتو ، blkid في داخل sys-apps/util-linux - AdmiralNemo


بالنسبة لأقراص GPT المقسمة فقط

على قرص GPT منسق ، يتم تعيين كل قسم من المعرف الفريد العمومي (GUID) ، وهو شكل من أشكال UUID ، على الرغم من أنه ليس على الأرجح ما يشير إليه الملصق الأصلي. لذا فإن هذه الإجابة ربما تكون أقل فائدة للمسؤل الأصلي. ومع ذلك ، أعتقد أن هناك تمييزًا مهمًا يجب ملاحظته.

للحصول على GUID للقسم 1 على GPT تنسيق القرص / dev / sda ، بالإضافة إلى تسمية القسم الخاص به وهكذا:

sudo sgdisk -i 1 /dev/sda

أو كل ذلك مع:

ls -l /dev/disk/by-partuuid

للتشغيل مع جذر نظام الملفات الموجود على قسم معين ، يمكنك استخدام بناء جملة معلمة linux kernel:

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

في هذه الحالة ، يمكنك تحديد بداية UUID فقط - ما يكفي لتكون فريدة. هذه المعلمة أكثر بدائية ويمكن أن تفهمها النواة في وقت مبكر من عملية التمهيد الخاصة بها.


هناك اختلاف في الدلالات بين هذه:

يحمل القرص أقسامًا ، قسمًا يحمل نظام ملفات ، نظام ملفات يحمل مجلدات وملفات. بالنسبة لبعض التركيبات وأنظمة التشغيل ، هناك طبقات أكثر.

يشير GUID UUID والتسمية المقترنة إلى قسم ، ولكن ليس محتويات القسم. سيكون قسم جديد على نفس القرص أو قسم على قرص جديد GUID UUID جديد. يمكن أن يحتوي نفس القسم على نظام ملفات واحد يومًا وآخر في يوم مختلف. يوجد فقط للأقراص المنسقة GPT ، ولكن ليس للأقراص المقسمة القديمة. عادة لا توجد فائدة هنا أكثر من التحديد root=/dev/sda1 أو root=8:1.

الإجابات الحالية الأخرى تشير إلى UUID من نظام الملفات في بعض تحتوي على التقسيم. إذا تم نسخ نظام الملفات ، ككل ، إلى قسم آخر أو قرص ثابت تبقى القيمة نفسها. هذا UUID مفيد في العثور على نظام الملفات المنقولة. لذلك ربما يكون هذا الأمر أكثر ملاءمة لمعظم الناس. معلمة نواة لينكس root=UUID=87654321-4321-4321-a567-123456789012 يشير إلى هذا.

أعتقد root=LABEL= و root=UUID= يتم تنفيذها من قبل المستخدمين في وقت مبكر ، ورمز init الذي رأيته في اليوم الآخر على نظامي ترجم هذه المعلمات إلى / dev / disk / by-uuid و / dev / disk / by-label (الروابط التي أعتقد أنها تم إنشاؤها بواسطة udev في المستخدمين على بلدي النظام).

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


9
2018-06-23 21:55



يبدو أن الاستخدام الصحيح -i1 أو -i 1، في مقابل -i:1مع sgdisk 1.0.1. - Charles Duffy
CharlesDuffy شكرا لإيجاد هذا الخطأ. لقد قمت بتحرير الإجابة لتصحيحها. - John S Gruber


أسهل طريقة للقيام بذلك لـ ext2 / ext3 / ext4 هي:

/sbin/tune2fs -l /dev/sda1

5
2018-05-02 15:57



سوف يعمل هذا بشرط أن يتم تنسيق نظام الملفات لديك على هيئة ext2 أو ext3 أو ext4. معظم أنظمة الملفات هي واحدة من هذه ولكن ليس كلها. كما أنه لن يعمل من أجل أقسام المبادلة. انظر جوابي لطريقة عالمية. - Hamish Downer
هذه النتائج في حالتي في Couldn't find valid filesystem superblock. - Michel


الطريقة الموصى بها للقيام بذلك هي القيام به

sudo vol_id -u /dev/sda2

لمعرفة المزيد عن استخدام UUID ، انظر هذه المقالة (من مساعدة أوبونتو ، ولكن يجب أن تعمل لأي توزيعة لينكس باستخدام UUID).

كما هو مذكور في التعليقات على هذا السؤال ، قد لا يكون vol_id في طريقك. على أوبونتو هو في / sbin حتى يعمل أعلاه. يبدو أن فيدورا بحاجة

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

إذا كانت التوزيعات الأخرى تحتوي على vol_id في أماكن أخرى ، فقم بنشر تعليق وسأضيفه إلى هذه الإجابة.


3
2018-05-02 16:53



هذا لا يعمل على جهاز الكمبيوتر المحمول الخاص بي فيدورا 10. - Eddie
هذا هو حل أفضل بكثير من الألغام. Eddie، vol_id موجود في / lib / udev. mish، could you edit your answer to prefix the full path in front of vol_id؟ / lib / udev ليس في مسار الجذر بشكل افتراضي على أي توزيع أنا على علم به. - Mihai Limbăşan
يبدو أن "/ lib / udev / vol_id / dev / sda2" يعمل. قلة من الناس سيكون لديهم / lib / udev في طريقهم. - Eddie
على جهاز الكمبيوتر الخاص بي Ubuntu هناك ارتباط رمزي من /sbin/vol_id إلى /lib/udev/vol_id - Brad Gilbert
vol_id تم إسقاطها من Ubuntu اعتبارًا من Karmic (9.10) ، لذلك لم تعد مفيدة أو ذات صلة. مرت الكثير من التشويهات للوصول إلى هناك vol_id كان في نقطة واحدة بنيت ليحل محل blkid. - Alain O'Dea


على افتراض أنك تريد UUID لـ sda1 ، يمكنك تجربة شيء مثل هذا:

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

ضبط sda1 وفقا لذلك. للحصول على UUIDs لجميع الأقسام ، أفلت greps and cuts، 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

تحرير: يرجى ملاحظة أن هذا الحل ، في حين أن أكثر مفتعلة من udev-> vol_id واحد ، هل ليس تتطلب امتيازات الجذر ، وستعمل على أي نواة ما بعد عام 2005 أو ما يقارب ذلك ، وتعتمد على الأدوات الموجودة في أي توزيعة لينكس والتي تكون بشكل افتراضي في المسار لأي مستخدم.


2
2018-05-02 16:22



سيعمل هذا على أي جهاز كمبيوتر يقوم بتشغيل أجهزة devfs حديثة بشكل كاف. - Eddie


يبدو هذا عمل بالنسبة لي:

sudo dumpe2fs /dev/sda1 | grep UUID

2
2017-09-18 21:08





يمكنك أيضًا استخدام هذا لطباعة جميع UUID:

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 {}" \;

تكيف الأسلوب الثاني لطباعة كافة UUID:

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

1
2017-11-30 23:09





طريقة البرنامج النصي النظيف للقيام بذلك والتي تعمل على أي نوع من أنظمة الملفات هي:

lsblk -no UUID <device-containing-FS>

أو ، بالنظر إلى نقطة الاتصال (أو أي ملف داخله):

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

الإخراج هو UUID ، UUID بالكامل ، ولا شيء غير UUID.


1
2017-12-30 13:29





يمكنك استخدام التالي للحصول على UUID لمحرك أقراص معين ،

sudo vol_id -u /dev/sda1

أو يمكنك استخدام هذا لإدراج جميع UUIDs للوسائط المرفقة ،

ls /dev/disk/by-uuid

0
2018-05-02 17:24



لم يعد قابلا للتطبيق اعتبارا من Ubuntu 9.10 vol_id تم إزالته. - Alain O'Dea