파일 시스템의 UUID를 찾는 방법


133

우분투를 실행 중이며 UUID특정 파일 시스템 (파티션이 아닌) 을 찾고 싶습니다 . e2label /dev/sda1파일 시스템 레이블을 찾는 데 사용할 수 있지만를 찾는 비슷한 방법이없는 것 같습니다 UUID.


모든 답변에 감사드립니다. 나는 다른 상황에서 모두 사용할 것이라고 확신합니다.
브래드 길버트

2
제목은 "파티션의 UUID를 어떻게 찾습니까?"였습니다. 이 질문은 GPT 파티션 테이블을 사용할 때만 의미가 있습니다. 해당 질문에 대한 답변 입니다.
Alastair Irvine

답변:


164

사용 가능한 또 다른 명령은 '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

/ dev / sda1에 대한 UUID 만 표시하십시오.

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

1
우분투 컴퓨터에서는 sudo를 사용할 필요가 없습니다.
브래드 길버트

그냥 입력 blkid하면 원하는 것을 정확히 얻었지만 요청한 것은 아닙니다. (어쨌든 잘 사용하고 있기 때문에 잘 받아들입니다)
Brad Gilbert

3
최신 버전의 Ubuntu에서 해당하는 명령 blkid -L은 이제 blkid -o list; -L옵션이 변경되었습니다 -L label지정된 라벨을 사용하는 장치를 검색 할 수 있습니다.
aculich

@aculich에 대한 최신 구문을 포함하도록 답변을 업데이트했습니다 blkid. 언급 해 주셔서 감사합니다.
Christopher Cashell

2
훌륭합니다 blkid. 나는 항상 방금 했어요 ls -l /dev/disk/by-uuid. 젠투 blkid에서sys-apps/util-linux
AdmiralNemo

10

GPT 파티션 된 디스크 만

GPT 형식의 디스크에서 각 파티션에는 GUID가 할당되는데, 이는 UUID의 형태이지만 원래 포스터가 언급 한 것은 아닙니다. 따라서이 답변은 아마도 원래 질문자에게는 도움이되지 않을 것입니다. 그럼에도 불구하고 주목해야 할 중요한 차이점이 있다고 생각합니다.

GPT 포맷 디스크 / dev / sda에서 파티션 1의 GUID와 파티션 레이블 등을 얻으려면 다음을 수행하십시오.

sudo sgdisk -i 1 /dev/sda

또는 모두 :

ls -l /dev/disk/by-partuuid

특정 파티션에있는 파일 시스템의 루트로 부팅하려면 다음의 linux 커널 매개 변수 구문을 사용하십시오.

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

이 경우 고유 한 UUID의 시작 부분 만 지정할 수 있습니다. 이 매개 변수는 더 원시적이며 부팅 프로세스 초기에 커널에서 이해할 수 있습니다.


이들 사이에는 의미에 차이가 있습니다.

디스크는 파티션을 보유하고, 파티션은 파일 시스템을 보유하고, 파일 시스템은 디렉토리와 파일을 보유합니다. 일부 설정 및 운영 체제에는 더 많은 계층이 있습니다.

GUID UUID 및 관련 레이블은 파티션의 내용이 아니라 파티션을 나타냅니다. 동일한 디스크의 새 파티션 또는 새 디스크의 파티션에는 새로운 GUID UUID가 있습니다. 동일한 파티션이 하루에 한 파일 시스템을 보유하고 다른 날에 다른 파일 시스템을 보유 할 수 있습니다. GPT 포맷 디스크에만 존재하지만 레거시 파티션 된 디스크에는 존재하지 않습니다. 더 이상의 유틸리티를 지정하는 대신 여기에 일반적으로 없습니다 root=/dev/sda1root=8:1.

다른 현재 답변은 일부 포함 파티션 에있는 파일 시스템 의 UUID를 나타냅니다 . 파일 시스템이 전체적으로 다른 파티션이나 하드 디스크로 복사 된 경우 해당 값은 동일하게 유지됩니다. 이 UUID는 이동 된 파일 시스템을 찾는 데 유용합니다. 따라서 이것은 아마도 대부분의 사람들에게 더 적합 할 것입니다. 리눅스 커널 매개 변수 root=UUID=87654321-4321-4321-a567-123456789012가 이것을 참조합니다.

내가 믿는 root=LABEL=root=UUID=초기 사용자 공간 구현, 내 시스템에 다른 일 본 초기화 코드는 이러한 매개 변수 내가에서 udev에 의해 만들어집니다 믿고는 / dev / 디스크 /별로 UUID와는 / dev / 디스크 /별로 라벨 (링크를 번역 내 시스템의 사용자 공간).

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


올바른 사용법 은 sgdisk 1.0.1 에서 -i1또는으로 나타납니다 . -i 1-i:1
Charles Duffy

@CharlesDuffy 그 오류를 찾아 주셔서 감사합니다. 답을 수정하여 수정했습니다.
John S Gruber

7

모든 유형의 파일 시스템에서 작동하는 스크립트 정리 방법은 다음과 같습니다.

lsblk -no UUID <device-containing-FS>

또는 마운트 지점 (또는 그 안에있는 파일)이있는 경우 :

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

출력은 UUID, 전체 UUID이며 UUID 만입니다.


1
blkid루트가 될 필요가 없기 때문에 @ christopher-cashell의 답변 보다 낫습니다 . 마운트 지점 또는 파일의 경우 다음을 수행하십시오 lsblk -no UUID $(findmnt -n -o SOURCE --target <file>)..
marcz

btrfs를 서브 볼륨에 실패 @marcz은 : findmnt -n -o SOURCE --target ~제공 :/dev/mapper/vg_svelte-home[/@home]
톰 헤일에게

오른쪽 @ tom-hale lsblk -no UUID $(findmnt -n -o SOURCE --target <file> | cut -d[ -f1)은 존재하는 경우 하위 볼륨을 제거해야합니다.
marcz

5

ext2 / ext3 / ext4에서 가장 쉬운 방법은 다음과 같습니다.

/sbin/tune2fs -l /dev/sda1

3
파일 시스템이 ext2, ext3 또는 ext4로 포맷되어 있으면 작동합니다. 대부분의 파일 시스템은 이들 중 하나이지만 전부는 아닙니다. 스왑 파티션에서도 작동하지 않습니다. 보편적 인 방법은 내 대답을 참조하십시오.
Hamish Downer

이로 인해 제 사건은 다음과 같습니다Couldn't find valid filesystem superblock.
Michel

3

권장되는 방법은

sudo vol_id -u /dev/sda2

UUID 사용에 대한 자세한 내용은 이 기사를 참조 하십시오 (우분투 도움말에서 제공하지만 UUID를 사용하는 모든 Linux 배포판에서 작동해야 함).

이 질문에 대한 의견에서 언급했듯이 vol_id가 경로에 없을 수도 있습니다. 우분투에서는 / sbin에 있으므로 위와 같이 작동합니다. 페도라의 경우 필요한 것 같습니다

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

다른 배포판에 다른 위치에 vol_id가 있으면 주석을 게시하고이 답변에 추가하겠습니다.


Fedora 10 랩탑에서는 작동하지 않습니다.
Eddie

이것은 내 것보다 훨씬 나은 솔루션입니다. Eddie, vol_id는 / lib / udev에 있습니다. mish, 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

4
vol_id 는 Karmic (9.10)부터 Ubuntu에서 삭제되었으므로 더 이상 유용하거나 관련이 없습니다. vol_idblkid 를 대체하기 위해 만들어진 어느 시점에 있었기 때문에 많은 왜곡을 겪었습니다 .
Alain O'Dea


2

sda1의 UUID를 원한다고 가정하면 다음과 같이 시도 할 수 있습니다.

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

이에 따라 sda1을 조정하십시오. 모든 파티션에 대한 UUID를 얻으려면 grep과 cuts를 삭제하십시오.

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 배포판에있는 도구를 사용합니다. 모든 사용자의 경로


이것은 최근에 충분한 devfs를 실행하는 모든 컴퓨터에서 작동합니다.
Eddie

1

이것을 사용하여 모든 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
ls -l /dev/disk/by-uuid | grep `lsblk | grep "/" | awk '{print $1}'` | awk '{print $9}'

위의 내용은 수년 동안 대부분의 Linux 시스템에서 작동하는 것 같습니다. 잘 모르겠습니다. 나는 일련 번호를 얻는 것을 선호하지만 ... 이것은 루트 파일 시스템의 UUID입니다.

누구나 루트가 아니더라도 시리얼 번호를 얻을 수 있고 유닉스 버전이 다른 "비정상적인"패키지를 설치하지 않는 방법을 알고 있다면 항상 배울 수 있습니다. 그리고 나는 내가 혼합하는 것을 알고 있습니다-디스크가 아닌 루트 파일 시스템 UUID입니다.

BTW의 목적은 수정 될 수없는 머신 당 고유 번호를 생성하는 것입니다 (디스크 일련 번호 및 MAC 주소와 같이 오래 전에 사용 된 것).

단일 시스템으로 소프트웨어를 인코딩하는 데 사용됩니다. MAC 주소는 그들이 가상이 될 때까지 괜찮 았습니다 ... 일부 유쾌한 고객은 단순히 (물론 다른 네트워크에서) MAC 주소를 일정하게 설정하고 지불하지 않았습니다.

AIX에서는 기계를 식별하는 하나의 번호를 얻기위한 단일 호출이 있습니다. 하드웨어 변경이나 소프트웨어 업데이트가 발생하는지는 신경 쓰지 않으므로 어떻게하는지 모릅니다 ... 마더 보드가 변경되면 숫자가 변경되어 숨어 있다고 생각합니다. 그리고 그것은 드문 일이 아닙니다.


0

다음을 사용하여 특정 드라이브에 대한 UUID를 얻을 수 있습니다.

sudo vol_id -u /dev/sda1

또는이를 사용하여 연결된 미디어의 모든 UUID를 나열 할 수 있습니다.

ls /dev/disk/by-uuid

vol_id 가 제거되어 더 이상 Ubuntu 9.10부터 적용 할 수 없습니다 .
Alain O'Dea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.