linux: Làm cách nào tôi có thể xem tất cả các UUID cho tất cả các đĩa có sẵn trên hệ thống của mình?


154

Của tôi /etc/fstabchứa điều này:

# / was on /dev/sda1 during installation
UUID=77d8da74-a690-481a-86d5-9beab5a8e842 /               ext4    errors=remount-ro 0       1

Có một số đĩa khác trên hệ thống này và không phải tất cả các đĩa đều được gắn vào đúng vị trí (Ví dụ: / dev / sda1 và / dev / sdb1 đôi khi bị đảo ngược).

Làm cách nào tôi có thể thấy UUID cho tất cả các đĩa trên hệ thống của mình? Tôi có thể xem UUID cho đĩa thứ ba trên hệ thống này không?


@setzamora trả lời là tốt hơn. Hãy thay đổi câu trả lời được chấp nhận.
nslntmnx

Câu trả lời:


135

Trong /dev/disk/by-uuidđó có các liên kết tượng trưng ánh xạ UUID của mỗi ổ đĩa vào mục của nó trong /dev(ví dụ /dev/sda1)


3
Không thể đọc được khi phân vùng LVM.
Grzegorz Wierzowiecki

1
LVM đã sử dụng các mã định danh giống UUID dài (mặc dù được trình bày khác nhau) trong cấu trúc của nó. Tôi nghĩ lý do duy nhất để sử dụng UUID hệ thống tập tin với LVM sẽ là một giao diện hợp nhất cho một số loại tự động hóa, vì LVM đã thực hiện ánh xạ LV thành tên thân thiện với con người cho bạn.
telcoM

2
ls -lha /dev/disk/by-uuid
deFreitas

159

Có một công cụ được gọi là blkid(sử dụng nó như root hoặc với sudo),

# blkid /dev/sda1
/dev/sda1: LABEL="/" UUID="ee7cf0a0-1922-401b-a1ae-6ec9261484c0" SEC_TYPE="ext2" TYPE="ext3"

bạn có thể kiểm tra liên kết này để biết thêm


12
Chỉ cần một nhận xét nhỏ: có vẻ như là một thành viên của nhóm disklà đủ để chạy blkid; không cần đặc quyền superuser đầy đủ.
thân

10
Nếu bạn chỉ muốn UUID (như phân tích cú pháp trong tập lệnh), bạn có thể làm blkid /dev/sda1 -s UUID -o value.
Jack O'Connor

3
Nhận xét nhanh ở đây: trong bản phân phối của tôi (Debian 8), điều này mang lại UUID cũng như "PHẦN MỀM", điều này khá khó hiểu. Tôi đã sử dụng các lệnh {lsblk} chỉ cung cấp một giá trị.
takumar

2
Điều này giúp tiết kiệm rất nhiều thời gian, mặc dù tôi thích làm hơn blkid /dev/sd*để liệt kê tất cả các ổ đĩa .. Thông tin phát ra nói chung là quá đủ để tìm ổ đĩa bạn cần. :)
ZaLiTHkA

2
PHẦN MỀM cho các đĩa được phân vùng GPT là GPT UUID cho phân vùng, không phải cho hệ thống tệp trong đó. Có thể hữu ích khi một hệ thống tập tin chưa được tạo. Trên đĩa được phân vùng MBR, PARTUUID không phải là UUID thực, mà chỉ đơn giản là Chữ ký đĩa Windows từ MBR + số dash + số phân vùng.
telcoM

31

Lệnh tốt nhất để sử dụng là lsblk -f. Nó sẽ liệt kê tất cả các thiết bị và phân vùng, cách chúng được gắn (nếu có) và cấu trúc cây của các thiết bị trong trường hợp sử dụng LVM, crypto_LUKS hoặc nhiều nhóm âm lượng trên cùng một ổ đĩa.


10

Điều này làm việc cho tôi:

ls -la /dev/disk/by-uuid

Nếu bạn muốn kiểm tra loại phân vùng là gì, hãy sử dụng:

df -Th

và nó sẽ hiển thị cho bạn nếu bạn có ext3 hoặc ext2. Hôm nay nó đã giúp tôi vì có một phân vùng ext2 được định dạng và tôi nghĩ rằng đó là ext3, điều này khiến cho mount không thành công.


Bạn luôn có thể thử mount -t auto /dev/sda1 /media/sda1.
ott--

8

Để chỉ lấy UUIDthiết bị đĩa cụ thể (ví dụ được sử dụng trong tập lệnh), bạn có thể sử dụng:

sudo blkid -s UUID -o value /dev/sdXY

nơi /dev/sdXYlà tên của thiết bị.


6
lsblk -o +uuid,name

Bạn có thể thấy tất cả các kết quả đầu ra có thể được thêm vào -o( --output) với

lsblk --help

Ngoài ra điều này sẽ làm công việc

# blkid

Không nameđược in theo mặc định?
don_crissti

nó là. Đã thêm nó chỉ cho mục đích giáo dục (thêm dấu phẩy để phân tách các lĩnh vực bạn muốn)
Nico Rodsevich

2

Các câu trả lời trước không hoạt động cho nhiều thiết bị hoặc cho các thiết bị có UUID giống hệt nhau.

Thử đi:

sudo blkid /dev/sd*

1
Có thật không ? Ý bạn là, câu trả lời được bình chọn nhiều nhất không hoạt động?
don_crissti

Một mã định danh duy nhất trên toàn cầu (UUID) phải luôn là duy nhất. Toàn bộ mục đích của UUID là trở nên độc đáo, phổ biến. Nếu không, có một vấn đề. Tôi đã thấy các UUID trùng lặp trong các máy ảo nhân bản, ít nhất là cho các thiết bị mạng.
Stefan Lasiewski

5
Nếu bạn sao chép một phân vùng bằng ddlệnh, bản sao sẽ có cùng uuid và có, đó là một vấn đề. Các câu trả lời khác ở đây sẽ không cho thấy điều đó.
Kevin

1

Với dòng lệnh sau, bạn có thể thấy UUID cộng với ánh xạ tới các phân vùng.

ls /dev/disk/by-uuid -lt

lrwxrwxrwx 1 root root 10 Sep  1 18:51 57eacf4e-1940-436e-b945-85f8d4833aa5 -> ../../sda2
lrwxrwxrwx 1 root root 10 Sep  1 18:51 656f4cae-8527-43a0-a80f-00ac82818744 -> ../../sda1
lrwxrwxrwx 1 root root  9 Sep  1 18:51 d627595d-4060-440e-8380-a1fe9f3f2a81 -> ../../md0
lrwxrwxrwx 1 root root 10 Sep  1 18:51 0dfd6dfe-1852-460d-852c-676a5b9035ed -> ../../sda4
lrwxrwxrwx 1 root root 10 Sep  1 18:51 b1ddf850-8f81-429f-a653-38ae4a4ebb6f -> ../../sda3
lrwxrwxrwx 1 root root  9 Sep  1 18:51 b4b729f7-5699-411c-8f5a-424bbc7c89fc -> ../../sdb

Tại sao chúng ta có thể thấy uuid của sda
Honghe.Wu

Có một UUID cho một hệ thống tệp trên mỗi phân vùng. Trên sda, tôi có 4 phân vùng, vì vậy tôi có 4 UUID. wiki.debian.org/Part-UUID
Nicolas Guérinet

1

Tôi có cùng một vấn đề như bạn: đổi tên theo kernel /dev/sd**sau khi khởi động lại:

Tất nhiên, tất cả các cài đặt tự động của tôi /etc/fstabđược tham chiếu bởi LABEL hoặc UUID, vì vậy về cơ bản không có vấn đề gì cho điều đó. Và tất cả các lệnh trên, blkid hoặc lsblk, cung cấp loại thông tin này.

Nhưng rắc rối bắt đầu như trong trường hợp của tôi, khi bạn đang sử dụng phân vùng ở chế độ RAW, trong quan điểm của hệ thống hiện đang khởi động: ví dụ: phân vùng được sử dụng làm thiết bị thô, để tạo đĩa ảo cho VirtualBox (vì vậy tham chiếu đến phân vùng này là một cái gì đó như /dev/sdf3:) hoặc phân vùng được sử dụng làm thiết bị thô, để tạo LUN cho iSCSI (vì vậy tham chiếu đến phân vùng này là một cái gì đó như /dev/sdc6:)

Vì vậy, bây giờ khi khởi động, ví dụ như trong RC.local, bạn phải tìm một cách đáng tin cậy, /dev/sdXXthiết bị của phân vùng RAW chuyên dụng của bạn là gì và điều chỉnh một số tệp:

VÍ DỤ 1

Đĩa VirtualBox * .vmk mô tả về đĩa thô này, trong phần giống như:

\# Extent description
RW 488397167 FLAT "/dev/sdXX" 0

và sau đó khởi động lại dịch vụ VirtualBox

VÍ DỤ 2

trong cấu hình tgtd, một mục tiêu: target0 được liên kết với /dev/sdd6thời gian xây dựng. Sau khi khởi động lại, bạn nhận được cùng một phân vùng được đổi tên /deb/sdc6 Điều này xảy ra với một đĩa di động, USB hoặc eSATA! Vậy làm thế nào để tìm thiết bị mới tự động? Một lần nữa trong /etc/rc.d/rc.local

Vì vậy, trong trường hợp này, chúng ta cần một cách đáng tin cậy để tìm tên thiết bị mới là gì. Phân vùng GPT cung cấp GUID duy nhất cho bất kỳ phân vùng GPT nào, được viết trong bảng GPT.

gdisk không cung cấp thông tin này với chế độ liệt kê mà chỉ ở chế độ tương tác với: i lệnh. May mắn thay, blkid làm điều đó!

Vì vậy, bạn cần phải viết một tập lệnh shell, để tìm trong tất cả các đĩa của bạn, là thiết bị /dev/sdXX, được liên kết với GUID được chú ý tại thời điểm tạo phân vùng.

Một cái gì đó như, search_device_by_partUUID.sh:

\#!/bin/bash

PART_UUID=$1
if [ "$PART_UUID" = "" ]
then
    echo "Syntax: $0 <a valid partition UUID>"
    exit 3
fi
lsblk | grep '^sd' | awk '{print $1}' | while read DISK_DEVICE
do 
    INFO=`blkid /dev/${DISK_DEVICE}* | grep "PARTUUID=\"$PART_UUID\"" `
    if [ "$INFO" != "" ]
    then
        echo INFO : "$INFO"
        BLK_DEVICE=`echo "$INFO" | awk '{print $1}'`
        echo $BLK_DEVICE > /dev/shm/blkdevice
        echo -n "BLK_DEVICE : " ; cat /dev/shm/blkdevice
    fi
done

và sau đó sử dụng /dev/shm/blkdevice, trong tập lệnh RC.local của bạn.


0

Để xem uuid của phân vùng đĩa cứng, tôi chỉ cần khởi động hệ thống với đĩa CD Linux và lấy giá treo máy tính của tôi, nhấp vào, phân vùng tôi muốn xem. Số uuid của phân vùng Linux sẽ được hiển thị.

Bạn cũng có thể thấy đĩa uuid bằng cách chạy tiện ích Linux Disk sau khi đĩa CD Linux khởi động.


"Giá treo máy tính của tôi" là gì? Và "Tiện ích đĩa Linux" là gì, nghe có vẻ như tiện ích đĩa gnome hay còn gọi là Đĩa?
Xen2050
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.