Tôi đang chạy Ubuntu và muốn tìm hiểu UUID
một hệ thống tập tin cụ thể (không phải phân vùng). Tôi biết tôi có thể sử dụng e2label /dev/sda1
để tìm ra nhãn hệ thống tập tin, nhưng dường như không có cách nào tương tự để tìm UUID
.
Tôi đang chạy Ubuntu và muốn tìm hiểu UUID
một hệ thống tập tin cụ thể (không phải phân vùng). Tôi biết tôi có thể sử dụng e2label /dev/sda1
để tìm ra nhãn hệ thống tập tin, nhưng dường như không có cách nào tương tự để tìm UUID
.
Câu trả lời:
Một lệnh khác có thể có sẵn và cũng hoạt động khá tốt cho việc này là 'blkid'. Đây là một phần của gói e2fspross. Ví dụ về việc sử dụng nó:
Tra cứu dữ liệu trên / dev / sda1:
topher@crucible:~$ sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
Hiển thị dữ liệu UUID cho tất cả các phân vùng:
topher@crucible:~$ sudo blkid
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"
/dev/sdb: UUID="467c4aa9-963d-4467-8cd0-d58caaacaff4" TYPE="ext3"
Hiển thị dữ liệu UUID cho tất cả các phân vùng ở định dạng dễ đọc hơn: (Lưu ý: trong các bản phát hành mới hơn, blkid -L
có ý nghĩa khác và blkid -o list
nên được sử dụng thay thế)
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
Chỉ hiển thị UUID cho / dev / sda1 và không có gì khác:
topher@crucible:~$ sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
blkid
, đã cho tôi chính xác những gì tôi muốn, nhưng không hoàn toàn những gì tôi yêu cầu. (Dù sao tôi cũng chấp nhận nó, vì tôi chắc chắn rằng tôi sẽ sử dụng nó thường xuyên)
blkid -L
hiện đã có blkid -o list
; các -L
tùy chọn đã được thay đổi -L label
để tìm kiếm một thiết bị sử dụng nhãn chỉ định.
blkid
. Cảm ơn đã đề cập đến nó.
blkid
; Tôi đã luôn luôn hoàn thành ls -l /dev/disk/by-uuid
. Trên Gentoo, blkid
đang ởsys-apps/util-linux
Chỉ dành cho đĩa được phân vùng GPT
Trên đĩa được định dạng GPT, mỗi phân vùng được gán GUID, đây là một dạng của UUID, mặc dù có lẽ không phải là những gì người đăng ban đầu đã đề cập. Do đó, câu trả lời này có lẽ ít hữu ích hơn cho người hỏi ban đầu. Tuy nhiên, tôi tin rằng có một sự khác biệt quan trọng cần được chú ý.
Để nhận GUID của phân vùng 1 trên đĩa / dev / sda được định dạng GPT, cũng như nhãn phân vùng của nó, v.v.
sudo sgdisk -i 1 /dev/sda
hoặc tất cả với:
ls -l /dev/disk/by-partuuid
Để khởi động với thư mục gốc của hệ thống tệp nằm trên một phân vùng nhất định, bạn sẽ sử dụng cú pháp tham số kernel linux của:
root=PARTUUID=87654321-4321-4321-abcd-123456789012
Trong trường hợp này, bạn có thể chỉ định bắt đầu UUID - đủ để là duy nhất. Tham số này nguyên thủy hơn và có thể được hiểu bởi kernel trước đó trong quá trình khởi động của nó.
Có một sự khác biệt về ngữ nghĩa giữa những điều này:
Một đĩa chứa các phân vùng, một phân vùng chứa một hệ thống tệp, một hệ thống tệp chứa các thư mục và tệp. Đối với một số thiết lập và hệ điều hành có nhiều lớp hơn.
GUID UUID và nhãn liên quan đề cập đến một phân vùng, nhưng không phải là nội dung của phân vùng. Một phân vùng mới trên cùng một đĩa hoặc một phân vùng trên một đĩa mới sẽ có UIDID GUID mới. Phân vùng tương tự có thể chứa một hệ thống tệp một ngày và một hệ thống khác vào một ngày khác. Nó chỉ tồn tại cho các đĩa được định dạng GPT, nhưng không tồn tại cho các đĩa được phân vùng cũ. Thường không có nhiều tiện ích ở đây hơn là chỉ định root=/dev/sda1
hoặc root=8:1
.
Các câu trả lời hiện tại khác đề cập đến UUID của một hệ thống tệp trong một số phân vùng có chứa. Nếu toàn bộ hệ thống tệp được sao chép sang một phân vùng hoặc đĩa cứng khác thì giá trị đó vẫn giữ nguyên. UUID này hữu ích trong việc tìm kiếm một hệ thống tệp di chuyển. Do đó, điều này có lẽ phù hợp hơn với hầu hết mọi người. Tham số kernel Linux root=UUID=87654321-4321-4321-a567-123456789012
đề cập đến điều này.
Tôi tin root=LABEL=
và root=UUID=
được triển khai bởi không gian người dùng sớm, mã init mà tôi thấy vào ngày khác trên hệ thống của tôi đã dịch các tham số này thành / dev / đĩa / by-uuid và / dev / đĩa / by-nhãn (các liên kết tôi tin là do udev tạo ra không gian người dùng trên hệ thống của tôi).
[1] http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/init/do_mounts.c#n183
-i1
hoặc -i 1
trái ngược -i:1
với sgdisk 1.0.1.
Cách làm sạch tập lệnh để thực hiện việc này trên bất kỳ loại hệ thống tập tin nào là:
lsblk -no UUID <device-containing-FS>
Hoặc, được đưa ra điểm gắn kết (hoặc bất kỳ tệp nào trong đó):
lsblk -no UUID $(df -P <file> | awk 'END{print $1}')
Đầu ra là UUID, toàn bộ UUID và không có gì ngoài UUID.
blkid
trong câu trả lời từ @ christopher-cashell, vì bạn không cần phải trở thành root. Đối với một điểm gắn kết hoặc một tập tin tốt hơn làm : lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)
.
findmnt -n -o SOURCE --target ~
đưa ra:/dev/mapper/vg_svelte-home[/@home]
lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)
nên thoát khỏi subvolume khi có mặt.
Cách dễ nhất để làm điều này cho ext2 / ext3 / ext4 là:
/sbin/tune2fs -l /dev/sda1
Couldn't find valid filesystem superblock.
Cách được đề xuất để làm điều này là làm
sudo vol_id -u /dev/sda2
Để biết thêm về cách sử dụng UUID, hãy xem bài viết này (từ trợ giúp của Ubuntu, nhưng nên hoạt động cho bất kỳ bản phân phối linux nào sử dụng UUID).
Như đã lưu ý trong các bình luận cho câu hỏi này, vol_id có thể không nằm trong đường dẫn của bạn. Trên ubfox, nó nằm trong / sbin nên ở trên sẽ hoạt động. Đối với fedora, nó dường như cần
sudo /lib/udev/vol_id -u /dev/sda2
Nếu các bản phân phối khác có vol_id ở những nơi khác thì hãy đăng bình luận và tôi sẽ thêm nó vào câu trả lời này.
/sbin/vol_id
đến/lib/udev/vol_id
Điều này dường như làm việc cho tôi:
sudo dumpe2fs /dev/sda1 | grep UUID
Giả sử bạn muốn UUID cho sda1, bạn có thể thử một cái gì đó như thế này:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" | grep ../sda1 | cut -d\: -f2 | cut -d/ -f5 ; done
Điều chỉnh sda1 cho phù hợp. Để có được UUID cho tất cả các phân vùng, hãy bỏ các greps và cắt, a la:
for v in /dev/disk/by-uuid/* ; do echo "`readlink $v`: $v" ; done
Đầu ra mẫu cho sda1 trên máy tính để bàn của tôi:
[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
Chỉnh sửa: Xin lưu ý rằng giải pháp này, mặc dù được sử dụng nhiều hơn udev-> vol_id, không yêu cầu quyền root, sẽ hoạt động trên mọi kernel sau năm 2005 hoặc dựa trên các công cụ có trong bất kỳ bản phân phối Linux nào theo mặc định trong đường dẫn cho bất kỳ người dùng.
Bạn cũng có thể sử dụng điều này để in tất cả các UUID:
for disk in /dev/disk/by-uuid/*; do
basename "$(readlink "$disk")"
basename "$disk"
echo
done
hoặc lệnh đơn giản hơn được cho là này, thay thế sda1
bằng thiết bị bạn muốn tìm kiếm:
disk=sda1
find /dev/disk/by-uuid -type l -exec sh -c "readlink {} | grep -o $disk && basename {}" \;
một sự thích ứng của phương pháp thứ hai để in tất cả các 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}'
Ở trên dường như hoạt động trên hầu hết (tất cả những gì tôi đã tìm thấy) các hệ thống Linux trong nhiều năm. Nó có thể có sai sót, tôi không biết. Tôi muốn lấy số sê-ri nhưng ... đây là UUID của hệ thống tập tin gốc.
Nếu bất cứ ai có cách lấy số sê-ri mà không cần phải root (như của tôi) và không cài đặt các gói "bất thường" khác nhau trong các phiên bản Unix khác nhau, tôi sẽ đánh giá cao - luôn có thể học được điều gì đó. Và tôi biết rằng tôi đang trộn lẫn mọi thứ - đó là hệ thống tập tin gốc UUID, không phải là đĩa.
Mục đích, BTW, là tạo ra một số duy nhất cho mỗi máy không thể sửa đổi (như số sê-ri đĩa và giống như địa chỉ MAC đã có từ lâu).
Nó được sử dụng để mã hóa phần mềm vào một máy duy nhất. Địa chỉ MAC vẫn ổn cho đến khi họ cho phép họ ảo ... một số khách hàng nhếch nhác chỉ đơn giản đặt địa chỉ MAC của họ thành một hằng số (tất nhiên trên các mạng khác nhau) và tránh trả tiền cho tôi.
Trong AIX có một cuộc gọi duy nhất để nhận một số nhận dạng máy. Không quan tâm nếu thay đổi phần cứng hoặc cập nhật phần mềm xảy ra nên tôi không biết họ làm thế nào ... Nếu bo mạch chủ thay đổi, thì số đó thay đổi, vì vậy tôi nghĩ rằng họ giấu nó ở đó. Và đó là vượt quá hiếm.
Bạn có thể sử dụng cách sau để lấy UUID cho một ổ đĩa cụ thể,
sudo vol_id -u /dev/sda1
hoặc bạn có thể sử dụng điều này để liệt kê tất cả các UUID cho phương tiện đính kèm,
ls /dev/disk/by-uuid