Linux(Debian)에서 디스크(파티션 아님)를 안정적으로 식별합니다.

Linux(Debian)에서 디스크(파티션 아님)를 안정적으로 식별합니다.

다음과 같은 스크립트로 디스크의 파티션 테이블을 백업하고 싶습니다.

sfdisk --dump /dev/sda > partition_table.dump

하지만

  • /dev/sda신뢰할 수 없기 때문에 사용하고 싶지 않습니다 .

  • /dev/disk/by-id 역시 보인다신뢰할 수 없게 됩니다.

  • /dev/disk/by-uuid파티션만 포함 합니다 df(디스크 제외).

그러나 fdisk -l"디스크 식별자" UUID가 표시됩니다. sda디스크 식별자에서 디스크 이름( )을 어떻게든 얻을 수 있나요 ? 아니면 디스크를 안정적으로 식별할 수 있는 다른 방법이 있습니까?

답변1

어쨌든 사용하세요 /dev/disk/by-id/.귀하가 링크한 문제제가 보기에는 드문 하드웨어 오작동이나 그와 유사한 문제인 것 같습니다.

비교하다

ls -l /dev/disk/by-id/

에게

# 'lsblk' is from 'util-linux' package
lsblk -pdo NAME,VENDOR,MODEL,SERIAL,WWN

그러나 내 시스템 중 일부에서는 위 명령이 빈 값을 표시합니다. 그래도 시도해 볼 수 있습니다.

# the below 'smartctl' command (from 'smartmontools' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  printf "%s\n" "$sd"; smartctl -i "$sd" |
  grep -E "Model:|Number:|WWN"
done

나는 별로 아는 바가 없다.WWN그러나 일련번호는 하드웨어에 하드코딩되어야 합니다. 내 요점은 어떤 이유로든 일련 번호가 변경되면 갑자기 작동하지 않는 백업 스크립트보다 더 큰 문제가 발생할 수 있다는 것입니다.


일련 번호는 파티션 테이블이 무엇이든 관계없이 물리적 장치를 식별합니다(또는 파티션 테이블이 있는 경우 "슈퍼플로피"라는 용어를 연구하고이 질문). 파티션 테이블 자체를 식별하려면 발견한 "디스크 식별자" UUID가 올바른 접근 방식이 될 것입니다(GPT 구성표에서는 128비트 UUID이지만 MBR에서는 32비트 선택적 서명입니다.여기 예). 이는 변경, 복제, 백업이 가능한 디스크의 몇 바이트에 불과합니다. 사용 가능한 장치를 검색하는 것 외에는 이러한 유형의 식별자로 장치 노드를 식별하는 빠른 방법을 찾지 못했습니다.

id=8080fdb4-6905-4f34-91fa-61389615d7d3
# the below 'fdisk' command (from 'util-linux' package) probably needs 'sudo'
for sd in $(lsblk -pdo NAME | tail -n +2); do
  fdisk -l "$sd" | grep -qi " ${id}$" && printf "%s\n" "$sd"
done

/dev/disk/by-uuid[...] 파티션만 포함합니다(디스크 제외).

글쎄요, 이러한 UUID는 파티션 자체가 아닌 파티션 내부 구조(파일 시스템이나 스왑 등)를 참조하기 때문에 UUID가 모두 포함되지 않을 수도 있습니다(그리고 슈퍼플로피를 다루는 경우 여기에는 전체 디스크로 표시됩니다). 이러한 각 UUID는 해당 파티션(또는 슈퍼플로피인 경우 장치) 내부 어딘가에 기록됩니다. 예를 들어 호출할 때 표시되는 식별자입니다.

# 'file' is from 'file' package
file -s /dev/sda2

파티션 식별자가 필요한 경우 /dev/disk/by-partuuid/. 이것들은 에서와 동일합니다

# 'partx' is from 'util-linux' package
partx --show /dev/sda

파티션 내부가 아닌 해당 파티션 테이블에 저장됩니다. 실행하면 더 넓은 그림을 얻을 수 있습니다

# 'blkid' (from 'util-linux' package) probably needs 'sudo'
blkid

특정 UUID가 있는 파티션을 보유하는 장치를 식별하려면 다음을 시도하십시오.

id=68e3b991-5c7a-4d18-a120-834ef4effe00
readlink -e "/dev/disk/by-partuuid/$id" | sed 's/[0-9]*$//'

( sed여기서 후행 숫자만 제거합니다). 이 솔루션은 /dev/disk/by-uuid/필요한 경우 정보를 검색하도록 쉽게 조정할 수 있습니다 .

관련 정보