it-swarm-ko.tech

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

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

135
Brad Gilbert

사용 가능할 수있는 또 다른 명령은 'blkid'입니다. e2fsprogs 패키지의 일부입니다. 사용법의 예 :

/ dev/sda1에서 데이터를 검색하십시오.

[email protected]:~$ Sudo blkid /dev/sda1
/dev/sda1: UUID="727cac18-044b-4504-87f1-a5aefa774bda" TYPE="ext3"

모든 파티션에 대한 UUID 데이터를 표시하십시오.

[email protected]:~$ 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 대신 사용해야합니다.)

[email protected]:~$ 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 만 표시하십시오.

[email protected]:~$ Sudo blkid -s UUID -o value /dev/sda1
727cac18-044b-4504-87f1-a5aefa774bda
169

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/sda1 또는 root=8:1.

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

나는 믿는다 root=LABEL=root=UUID=는 초기 사용자 공간에 의해 구현되며, 다른 날 시스템에서 본 매개 변수를 이러한 매개 변수를/dev/disk/by-uuid 및/dev/disk/by-label로 변환했습니다 (사용자 공간의 udev에서 만든 링크라고 생각합니다) 내 시스템에서).

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

11
John S Gruber

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

lsblk -no UUID <device-containing-FS>

또는 마운트 지점 (또는 그 안에있는 파일)이 주어지면 :

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

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

8
Tom Hale

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

/sbin/tune2fs -l /dev/sda1
5
Eddie

권장되는 방법은

Sudo vol_id -u /dev/sda2

UUID 사용에 대한 자세한 내용은 이 기사 (ubuntu 도움말의 UUID를 사용하는 Linux 배포판에서 작동해야 함)를 참조하십시오.

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

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

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

3
Hamish Downer

이것은 나를 위해 작동하는 것 같습니다 :

Sudo dumpe2fs /dev/sda1 | grep UUID
3

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의 샘플 출력 :

[[email protected] ~]$ 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 솔루션보다 더 많이 고안되었지만 not 루트 권한이 필요하며 2005 년 이후 커널에서 작동하며 모든 도구에 의존합니다. 기본적으로 모든 사용자의 경로에있는 Linux 배포.

2
Mihai Limbăşan

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

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

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

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

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

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

1
Eric Eberhard

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

Sudo vol_id -u /dev/sda1

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

ls /dev/disk/by-uuid
0
Rich Adams