ฉันใช้งาน Ubuntu และต้องการค้นหาUUID
ระบบไฟล์เฉพาะ (ไม่ใช่พาร์ติชัน) ฉันรู้ว่าฉันสามารถใช้e2label /dev/sda1
เพื่อหาฉลากระบบแฟ้ม UUID
แต่มีไม่ดูเหมือนจะเป็นวิธีที่คล้ายกันเพื่อหาสิ่งที่
ฉันใช้งาน Ubuntu และต้องการค้นหาUUID
ระบบไฟล์เฉพาะ (ไม่ใช่พาร์ติชัน) ฉันรู้ว่าฉันสามารถใช้e2label /dev/sda1
เพื่อหาฉลากระบบแฟ้ม UUID
แต่มีไม่ดูเหมือนจะเป็นวิธีที่คล้ายกันเพื่อหาสิ่งที่
คำตอบ:
คำสั่งอื่นที่อาจพร้อมใช้งานและยังทำงานได้ค่อนข้างดีสำหรับสิ่งนี้คือ '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
blkid
ให้ฉันได้ตามที่ฉันต้องการ แต่ไม่ใช่สิ่งที่ฉันขอ (ฉันยอมรับมันอยู่แล้วเพราะผมมั่นใจว่าผมจะใช้มันบ่อย)
blkid -L
คือตอนนี้blkid -o list
; -L
ตัวเลือกที่ได้รับการเปลี่ยน-L label
การมองหาอุปกรณ์ที่ใช้ฉลากที่ระบุ
blkid
ผมได้ปรับปรุงคำตอบรวมถึงไวยากรณ์ที่ผ่านมาสำหรับ ขอบคุณที่พูดถึงมัน
blkid
; ฉันเพิ่งทำls -l /dev/disk/by-uuid
ไป ใน Gentoo blkid
อยู่ในsys-apps/util-linux
สำหรับดิสก์พาร์ติชัน 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 นี้มีประโยชน์ในการค้นหาระบบไฟล์ที่ถูกย้าย ดังนั้นนี่อาจเกี่ยวข้องกับคนส่วนใหญ่ พารามิเตอร์เคอร์เนล Linux root=UUID=87654321-4321-4321-a567-123456789012
อ้างถึงสิ่งนี้
ฉันเชื่อroot=LABEL=
และroot=UUID=
ดำเนินการโดย userspace เริ่มต้นรหัส init ที่ฉันเห็นเมื่อวันก่อนในระบบของฉันแปลพารามิเตอร์เหล่านี้เป็น / dev / disk / by-uuid และ / dev / disk / by-label (ลิงก์ที่ฉันเชื่อว่าสร้างโดย udev ใน userspace บนระบบของฉัน)
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183
-i1
หรือ-i 1
ตรงข้าม-i:1
กับ sgdisk 1.0.1
วิธีทำความสะอาดสคริปต์ในการทำสิ่งนี้ซึ่งทำงานกับระบบไฟล์ทุกประเภทคือ:
lsblk -no UUID <device-containing-FS>
หรือรับ mountpoint (หรือไฟล์ใด ๆ ที่อยู่ภายใน):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
ผลลัพธ์คือ UUID, UUID ทั้งหมดและไม่มีอะไรนอกจาก UUID
blkid
คำตอบจาก @ christopher-cashell เพราะคุณไม่จำเป็นต้องกลายเป็นรูต lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
สำหรับจุดเชื่อมต่อหรือไฟล์ที่ดีกว่าทำ:
findmnt -n -o SOURCE --target ~
ให้:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
ควรกำจัด subvolume เมื่อมีอยู่
วิธีที่ง่ายที่สุดสำหรับ ext2 / ext3 / ext4 คือ:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
วิธีที่แนะนำให้ทำคือทำ
sudo vol_id -u /dev/sda2
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้ UUID ดูบทความนี้ (จากวิธีใช้ ubuntu แต่ควรใช้กับลินุกซ์ distro โดยใช้ UUIDs)
ดังที่ระบุไว้ในความคิดเห็นสำหรับคำถามนี้ vol_id อาจไม่อยู่ในเส้นทางของคุณ บน Ubuntu มันอยู่ใน / sbin ดังนั้นข้างต้นจะได้ผล สำหรับ fedora ดูเหมือนว่าต้องการ
sudo /lib/udev/vol_id -u /dev/sda2
หากการแจกแจงอื่นมี vol_id ในที่อื่นให้โพสต์ความคิดเห็นและฉันจะเพิ่มในคำตอบนี้
/sbin/vol_id
ไป/lib/udev/vol_id
ดูเหมือนว่าจะใช้งานได้สำหรับฉัน:
sudo dumpe2fs /dev/sda1 | grep UUID
สมมติว่าคุณต้องการ UUID สำหรับ sda1 คุณสามารถลองดังนี้:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done
ปรับ sda1 ตามลำดับ ในการรับ UUID สำหรับพาร์ติชันทั้งหมดให้วาง greps and บาดแผล a:
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 หรือมากกว่านั้นและอาศัยเครื่องมือที่มีอยู่ในการกระจาย Linux ใด ๆ ซึ่งเป็นค่าเริ่มต้นใน เส้นทางสำหรับผู้ใช้ใด ๆ
คุณสามารถใช้สิ่งนี้เพื่อพิมพ์ 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' \;
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'
ข้างต้นดูเหมือนว่าจะทำงานบนระบบ Linux ส่วนใหญ่ (ทั้งหมดที่ฉันได้พบ) ในช่วงหลายปีที่ผ่านมา มันอาจมีข้อบกพร่องฉันไม่รู้ ฉันต้องการรับหมายเลขซีเรียล แต่ ... นี่คือ UUID ของระบบไฟล์รูท
หากใครมีวิธีรับหมายเลขซีเรียลโดยไม่จำเป็นต้องเป็นรูท (เหมือนของฉัน) และไม่ติดตั้งแพ็คเกจ "ผิดปกติ" ที่แตกต่างกันใน Unix เวอร์ชันต่าง ๆ ฉันจะขอบคุณมัน - สามารถเรียนรู้บางสิ่งได้เสมอ และฉันรู้ว่าฉันกำลังผสมสิ่งต่าง ๆ - นี่คือระบบไฟล์รูท UUID ไม่ใช่ดิสก์
วัตถุประสงค์ BTW คือการสร้างหมายเลขเฉพาะต่อเครื่องที่ไม่สามารถแก้ไขได้ (เช่นหมายเลขซีเรียลดิสก์และเช่นเดียวกับที่อยู่ MAC เมื่อนานมาแล้ว)
มันใช้สำหรับการเข้ารหัสของซอฟต์แวร์ไปยังเครื่องเดียว ที่อยู่ MAC นั้นใช้ได้จนกว่าพวกเขาจะอนุญาตให้เป็นเสมือน ... ลูกค้าที่ไม่น่าไว้วางใจบางคนได้ตั้งที่อยู่ MAC ของพวกเขาเป็นค่าคงที่ (บนเครือข่ายที่แตกต่างกันของหลักสูตร) และหลีกเลี่ยงการจ่ายเงินให้ฉัน
ใน AIX มีการเรียกเพียงครั้งเดียวเพื่อรับหนึ่งหมายเลขที่ระบุเครื่อง มันไม่สนใจว่าการเปลี่ยนแปลงฮาร์ดแวร์หรือการอัพเดตซอฟต์แวร์จะเกิดขึ้นหรือไม่ดังนั้นฉันจึงไม่รู้ว่าจะทำอย่างไร ... หากแผงวงจรหลักเปลี่ยนไปจำนวนนั้นจะเปลี่ยนดังนั้นฉันคิดว่าพวกเขาซ่อนมันไว้ที่นั่น และนั่นเป็นสิ่งที่หายาก
คุณสามารถใช้สิ่งต่อไปนี้เพื่อรับ UUID สำหรับไดรฟ์หนึ่ง ๆ
sudo vol_id -u /dev/sda1
หรือคุณสามารถใช้สิ่งนี้เพื่อแสดงรายการ UUID ทั้งหมดสำหรับสื่อที่แนบมา
ls /dev/disk/by-uuid