שאלה כיצד ניתן למצוא את ה- 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

כדי לאתחל עם השורש של מערכת הקבצים להיות על מחיצה מסוימת אתה תשתמש תחביר הליבה לינוקס תחביר של:

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

במקרה זה אתה יכול לציין רק את ההתחלה של UUID - מספיק כדי להיות ייחודי. פרמטר זה הוא פרימיטיבי יותר והוא יכול להיות מובן על ידי הקרנל מוקדם יותר בתהליך האתחול שלה.


יש הבדל בסמנטיקה בין אלה:

דיסק מחזיק מחיצות, מחיצה מחזיקה מערכת קבצים, מערכת הקבצים מחזיקה ספריות וקבצים. עבור כמה סט-אפים ומערכות הפעלה יש יותר שכבות.

ה- GUID GUID והתווית המשויכת מתייחסים למחיצה, אך לא לתוכן המחיצה. מחיצה חדשה באותו דיסק, או מחיצה בדיסק חדש תהיה GUID חדש UUID. אותה מחיצה יכולה להכיל מערכת קבצים אחת ויום אחר ביום אחר. זה קיים רק עבור GPT מעוצב דיסקים, אבל לא עבור דיסקים מחיצות מדור קודם. בדרך כלל אין כאן יותר תועלת מאשר ציון root=/dev/sda1 או root=8:1.

התשובות האחרות האחרות מתייחסות ל- UUID של a מערכת קבצים בחלק המכיל מחיצה. אם מערכת הקבצים מועתקת, כמכלול, למחיצה אחרת או לדיסק קשיח שערך זה נשאר זהה. UUID זה שימושי במציאת מערכת קבצים זזה. לכן זה כנראה רלוונטי יותר עבור רוב האנשים. פרמטר ליבה של לינוקס root=UUID=87654321-4321-4321-a567-123456789012 מתייחס.

אני מאמין root=LABEL= ו root=UUID= מיושמים על ידי userPace מוקדם, קוד init ראיתי את היום השני על המערכת שלי מתורגם פרמטרים אלה / dev / דיסק / by-uuid ו / dev / דיסק / לפי תווית (קישורים אני מאמין שנוצרו על ידי udev ב userspace שלי מערכת).

[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. רוב מערכות הקבצים הן אחת מאלה אבל לא כולן. זה גם לא עובד עבור מחיצות swap. ראו את תשובתי בדרך אוניברסלית. - Hamish Downer
זה גורם למקרה שלי לתוך Couldn't find valid filesystem superblock. - Michel


הדרך המומלצת לעשות זאת היא לעשות

sudo vol_id -u /dev/sda2

למידע נוסף על השימוש ב- UUID, ראה המאמר הזה (מאובונטו עזרה, אבל צריך לעבוד עבור כל הפצה לינוקס באמצעות UUIDs).

כפי שצוין הערות לשאלה זו, vol_id לא יכול להיות בדרך שלך. על אובונטו זה ב / sbin אז האמור לעיל יעבוד. עבור fedora זה נראה צורך

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

אם הפצות אחרות יש vol_id במקומות אחרים ואז לכתוב תגובה ואני אוסיף את זה לתשובה זו.


3
2018-05-02 16:53



זה לא עובד על המחשב הנייד שלי 10 Fedora. - Eddie
זה פתרון הרבה יותר טוב משלי. אדי, vol_id ממוקם / lib / udev. mish, אתה יכול לערוך את התשובה שלך כדי להקדים את הנתיב המלא מול vol_id? / lib / udev הוא לא בנתיב השורש כברירת מחדל על כל הפצה אני מודע. - Mihai Limbăşan
"/ lib / udev / vol_id / dev / sda2" נראה לעבוד. מעט אנשים יהיו / lib / udev בדרכם. - Eddie
במחשב אובונטו שלי יש קישור סמלי מ /sbin/vol_id ל /lib/udev/vol_id - Brad Gilbert
vol_id כבר ירד מאובונטו כמו של קרמתי (9.10) אז זה לא שימושי או רלוונטי יותר. זה עבר הרבה עיוותים להגיע לשם vol_id היה בשלב מסוים בנוי להחליף בלק. - 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 עבור כל המחיצות, ירידה grips וחתכים, 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





ניתן גם להשתמש באפשרות זו כדי להדפיס את כל ה- UUIDs:

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

או שבאפשרותך להשתמש ברשימה זו כדי לציין את כל ה- UUID עבור המדיה המצורפת,

ls /dev/disk/by-uuid

0
2018-05-02 17:24



לא ניתן להחיל עוד על אובונטו 9.10 vol_id הוסר. - Alain O'Dea


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

הנ"ל נראה לעבוד על רוב (כל מה שמצאתי) מערכות לינוקס במשך שנים רבות. אולי יש לי פגמים, אני לא יודע. אני מעדיף לקבל את המספר הסידורי אבל ... זה UUID של מערכת הקבצים השורש.

אם למישהו יש דרך לקבל את המספר הסידורי בלי צורך להיות שורש (כמו שלי) ולא להתקין חבילות "חריגות" שונות בגרסאות שונות של יוניקס אני אעריך את זה - תמיד יכול ללמוד משהו. ואני מודע אני ערבוב דברים - היא מערכת הקבצים שורש UUID, לא דיסק.

המטרה, BTW, היא ליצור מספר ייחודי לכל מכונה שלא ניתן לשנות (כמו מספר סידורי של הדיסק וכמו כתובות MAC בעבר).

הוא משמש לקידוד של תוכנה למכונה אחת. כתובת MAC היה בסדר עד שהם אפשרו להם להיות וירטואלי ... כמה לקוחות slazy יש פשוט להגדיר כתובת MAC שלהם קבוע (על רשתות שונות כמובן) ונמנע לשלם לי.

ב AIX יש שיחה אחת כדי לקבל מספר אחד המזהה את המכונה. זה לא משנה אם השינויים בחומרה או עדכוני תוכנה להתרחש אז אין לי מושג איך הם עושים את זה ... אם לוח האם משתנה, אז מספר השינויים, אז אני חושב שהם מסתירים את זה שם. וזה מעבר נדיר.


0
2018-03-24 01:11