파티션이 아닌 디스크 장치에 레이블을 지정할 수 있습니까?


24

디스크 파티션에 레이블을 부착하기위한 e2label 및 friends 프로그램에 대해 알고 있습니다. 예 :

e2label /dev/sda1 bla

내가하고 싶은 것은 다른 것입니다 : 하드 드라이브, 즉 파티션이 아닌 / dev / sda에 대한 레이블을 만들고 싶습니다.

가능합니까? 그렇다면 어떻게합니까?

편집 : 배경 : 여러 개의 HD 베이가있는 경우 물리적 베이 문에 (종이) 레이블을 넣고 거기에 넣은 디스크에 동일한 레이블을 논리적으로 넣으려고합니다.

EDIT2 : 이것은 Ubuntu Linux 12.04 서버에 관한 것입니다.

EDIT3 : GPT 파티션에는 partlabel이 있습니다. 예를 들어 parted로 설정할 수 있습니다. 참조 /server//q/681088/76442를


1
당신이 가장 적합한 사람 중 하나이기 때문에 이것은 좋은 질문입니다. 레이블의 주요 목적은 다음에 다시 부팅 한 후 드라이브가 다르게 열거 된 경우에도 파티션을 고유하게 식별하는 것입니다. 그러나 드라이브 순서가 변경 될 수 있지만 파티션은 드라이브에 고정되어 있습니다. 따라서 드라이브에 파티션이 아닌 UUID / 레이블을 제공하는 것이 더 정확합니다. 이는 파티션의 이름이 UUID / 1, UUID / 2 등이됨을 의미합니다. 파티션에 레이블을 추가하는 데 아무런 문제가 없지만 기본 경우는 파티션 당이 아니라 드라이브 당 UUID를 사용해야합니다.
— Patrick Häcker

고마워, 그러나 나는 내가 정말로 첫번째 사람 중 하나라는 것을 의심한다. 이 문제는 이미 오랫동안 저를 자극했습니다.
— dummzeuch

1
디스크를 MSDOS 또는 유닉스 대신 GUID 파티션 테이블 (GPT)로 포맷하는 경우 (gnu parted 사용). 드라이브에는 UUID가 있고 파티션에는 UUID가 있으며 ext2 / 3 / 4 드라이브에는 고유 한 UUID가있을 수 있습니다. 나는 보통 / dev / disk / by-uuid를 사용하는 드라이브와 / dev / disk / by-partuuid에 의한 파티션을 찾을 수있다
— Rahly

답변:


9

초기 질문에는 이미 몇 가지 좋은 답변이 있으므로 디스크에 레이블을 지정하여 질문의 배경에 중점을 둘 것입니다.

드라이브의 일련 번호를 사용하여 핫 스왑 베이의 레이블을 인쇄합니다. 드라이브를 고유하고 일관되게 식별하는 가장 좋은 방법입니다. 어떤 베이 또는 어떤 컨트롤러에 연결되어 있는지에 관계없이 변경되지 않습니다.

Linux 또는 다른 Unix를 사용하고 있는지 언급하지는 않지만 Linux에서는 /를보고 브랜드, 모델 및 일련 번호가있는 디스크 (및 제외하려는 파티션) 목록을 얻을 수 있습니다. dev / disk / by-id / 디렉토리. 다음 bash 별칭이 유용하다는 것을 알았습니다.

alias list_disks='find /dev/disk/by-id/ -iname 'scsi-*' | grep -v -- -part | while read disk ; do echo $(readlink $disk | sed -e s:../../:: ) $(basename $disk); done'

( scsi-*SATA 및 SAS 드라이브를 포함하여 모든 "scsi-like"드라이브 를 찾습니다. SATA 드라이브 만있는 시스템 ata-*에서도 작동합니다.)

예를 들어 내 ZFS 서버 시스템 중 하나에서 다음과 같은 출력을 생성합니다.

# list_disks | 종류
sdb scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2195141
sdc scsi-SATA_WDC_WD10EACS-00Z_WD-WCASJ2114122
sdd scsi-SATA_ST31000528AS_9VP4P4LN
sde scsi-SATA_ST31000528AS_6VP3FWAG
sdf scsi-SATA_ST31000528AS_9VP509T5
sdg scsi-SATA_ST31000528AS_9VP4RPXK
sdh scsi-SATA_OCZ-VECTOR_OCZ-0974C023I4P2G1B8
sdi scsi-SATA_OCZ-VECTOR_OCZ-8RL5XW08536INH7R
sdj scsi-SATA_ST31000528AS_9VP18CCV
SDK scsi-SATA_WDC_WD10EARS-00Y_WD-WMAV50933036

보시다시피, / dev / disk / by-id 목록에는 각 드라이브의 브랜드 및 모델 번호와 일련 번호가 포함됩니다. LSI SAS-2008 컨트롤러의 SATA 포트 또는 SAS 포트에 연결된 모든 SATA 드라이브입니다.

라벨 프린터가 부착되어 있으면의 출력을 기반으로 라벨을 인쇄하기가 쉽습니다 list_disks. 나는 그것이 내가 가진 것이기 때문에 오래된 수동 레이블 작성기를 대신 사용했습니다. 인쇄 된 라벨에는 브랜드 / 모델이없는 일련 번호 만 포함되어 있습니다 (필요한 경우 드라이브를 식별하기에 충분합니다). 드라이브가 고장 나서 교체해야 할 때 레이블이 매우 편리합니다.


이것이 실제 문제에 대한 최선의 해결책이라고 생각하지만 질문에 대답하지 않기 때문에 이것을 대답으로 받아 들일 수 없습니다. 아마 좋은 생각이 아닌 질문을 수정하지 않는 한. 감사.
— dummzeuch

질문에 직접 대답하지 않았다고 말한 것처럼 문제 없습니다. 그러나 그것은 유용했고 다른 누군가가 앞으로 유용하게 사용될 것입니다. btw, 향상된 별칭 버전은 다음과 같습니다 alias list_disks='find /dev/disk/by-id/ -iname scsi-* -o -iname usb-* | grep -v -- -part | while read disk ; do echo $(basename $(readlink $disk)) $(basename $disk); done | sed -re "s/(usb|scsi)-// ; s/(SATA|Generic)_//" | sort'.. 그것은 또한 USB 디스크를 찾아서 출력에서 ​​불필요한 데이터를 제거합니다.
— cas

7

이것이 우리가 말하는 Linux라면, udev장치에 대한 심볼릭 링크를 만들기 위해 원하는 것을 얻을 수 있다고 생각합니다 . 를 보면 내용이 다음과 같은 줄을 /etc/udev/rules.d갖는 파일 70-persistent-cd.rules이 있습니다.

SUBSYSTEM=="block", ENV{ID_CDROM}=="?*", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-:0:0:0", SYMLINK+="cdrom", ENV{GENERATED}="1"

이것이하는 일은 /dev/cdromPCI 버스 주소로 식별 된 장치에 대한 심볼릭 링크 를 만드는 것 입니다. 예를 들어 HDD를 (베이 번호? 미안하지만 경험 없음)을 사용하여 HDD를 식별하고 위와 유사한 구문을 사용하여 HDD를 확인하여 원하는 것을 수행 할 수 있어야합니다 /dev/bay1. udev규칙 작성에 관한 다음 기사 가 도움이 될 수 있습니다.

udev 규칙 작성

노트

slm의 답변 덕분에이 솔루션을 사용하면 레이블이 내부의 디스크가 아닌 HDD 베이에만 적용됩니다. 당신이 레이블을 사용하는 경우 따라서, /dev/bay1과를 /dev/bay2하고 베이 2 베이 1 하드 디스크 B 하드 디스크 A를 가지고, 다음 /dev/bay1디스크 A를 참조하고, /dev/bay2어떤 이유로, 당신은 A와 B 디스크 교체, 디스크 B.하는 경우를 말한다, 당신이 얻을 /dev/bay1디스크 B를 참조하고 /dev/bay2질문에서 디스크 A. 참조, 나는 이것이 의도라고 생각합니다. 내가 틀렸다면 정정 해주세요.


1
이러한 일치를 위해 모델 번호와 일련 번호를 사용하는 것이 좋습니다. 여기에는 여전히 slm이 언급 한주의 사항이 포함되어 있지만 디스크 "라벨"은 시스템의 다른 디스크 나 디스크에 어떤 일이 있어도 일관되게 유지됩니다.
— CVn

여전히 보장 된 고유 WWN을 선호하는 것이 좋습니다. 이 답변을 참조하십시오 .
— Tom Hale

6

파티션을 e2label하지 않고 파일 시스템을 e2label합니다. 이러한 파일 시스템은 파일, 전체 디스크, 네트워크 블록 장치의 파티션에있을 수 있습니다.

그렇습니다. ext2 / 3 / 4 파일 시스템이 바로 켜져 /dev/sda있다면에있는 것과 동일하게 레이블을 지정할 수 있습니다 /dev/sda1.

이제 파일 시스템이 /dev/sda없지만 /dev/sdaGPT, MBR, LVM 등을 사용하여 여러 개의 파티션으로 분할 된 경우에는 사용할 수 없습니다 e2label /dev/sda.

GPT 파티셔닝에서 파티션에 이름을 지정할 수 있으므로 디스크를 식별하는 데 도움이되는 이름으로 하나의 섹터 큰 파티션을 만들 수 있습니다. 의 c명령으로 이를 수행 할 수 있습니다 gdisk.


3

파티션 대신 디스크에 레이블을 지정할 수 있다면 질문에 대답하려면 대답은 "아니오"입니다. 나는 그렇게하는 방법을 모른다.

@JosephR에 설명 된 방법을 사용할 수 있지만이 설정은 시스템에 따라 다르므로 해당 HDD를 다른 시스템으로 가져 가면 제안 된 "라벨링"이 손실됩니다. 의미있는 방식으로 디스크에 묶여 있지 않습니다.

또한, 다음을 사용하여 다른 드라이브에 대한 레이블 및 UUID 설정을 볼 수 있습니다. blkid 명령을 .

예

$ blkid
/dev/sda1: LABEL="SYSTEM_DRV" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda2: LABEL="Windows7_OS" UUID="XXXXXX" TYPE="ntfs" 
/dev/sda3: LABEL="Lenovo_Recovery" UUID="XXXX" TYPE="ntfs" 
/dev/sda5: UUID="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" TYPE="ext4" 
/dev/sda6: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXXfG93LA" TYPE="LVM2_member" 
/dev/mapper/vg_grinchy-lv_root: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 
/dev/mapper/vg_grinchy-lv_swap: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="swap" 
/dev/mapper/vg_grinchy-lv_home: UUID="XXXXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XXXXX" TYPE="ext4" 

설정이 시스템에 따라 다릅니다. 질문에서 OP는이를 알고 있다고 생각합니다. 실제 하드 드라이브가 아닌 HDD 베이에 레이블을 지정하려고합니다. 만약을 대비하여 답변에 메모로 추가하고 있습니다.
— Joseph R.

@Marco 그러나 blkid장치가 아닌 파티션 만 나열하는 것 같습니다. OP가 관심이있는 것은 아닙니다.
— Joseph R.

아니요, 실제로 베이가 아닌 디스크에 레이블을 지정하고 싶었습니다. 그러나이 옵션을 고려할 것입니다.
— dummzeuch

그것은 이다 디스크에 라벨을 할 수, 리눅스 자체 것은이 작업을 수행 /dev/disk/by-id하고 당신이 할 수있는 udev과 같이 스타일 이 답변 .
— Tom Hale

@TomHale-당신은 내 요점이 없습니다. 이 레이블은 HDD 자체에는 적용되지 않지만 Linux 시스템 자체 내에서 유지 관리됩니다. 시스템에서 해당 HDD를 제거하면 HDD가 마운트 된 다른 시스템에서 더 이상 레이블을 사용할 수 없습니다. 시스템에 따라 다르므로 조언이 정확합니다. DV를 바꾸십시오.
— slm

3

귀하의 주요 목표는 물리적 디스크를 명확하게 식별하는 것입니다. 불행히도 파일 시스템에 레이블을 지정할 때와 같은 방법으로 디스크에 레이블을 지정하는 표준 방법이 없다고 생각합니다.

한 가지 방법은 디스크 모델과 일련 번호를 사용하는 것입니다. Linux에서는로 식별자를 검색 할 수 있습니다 hdparm -i /dev/sdX. 일련 번호의 좋은 점은 제조업체 스티커에 이미 인쇄되어있을 수 있다는 것입니다. ( e2label질문에서 언급 한 이후로 대부분 Linux에 관심이 있다고 가정합니다 . 그렇다면 질문을 편집하고 태그를 추가하십시오 .)

하드웨어 RAID 컨트롤러를 사용하는 경우 hdparm작동하지 않을 수 있습니다. 대신 RAID 컨트롤러의 명령 줄 도구를 참조해야합니다.

디스크 내용에서 무언가로 식별하려면 GPT 파티션 테이블 헤더 ( LBA 1의 56-71 바이트 )에 저장된 디스크 GUID를 사용할 수 있습니다 . 선택한 레이블이 아닌 임의의 임의 문자열이지만 파티션 테이블을 클로버하기로 결정할 때까지 지속된다는 점에서 레이블과 같습니다. Linux에서는을 사용하여 디스크 GUID를 볼 수 있습니다 gdisk -l /dev/sdX.


1

내가 얻은 답변 (Thanks guys!)을 기반으로 실제로 디스크에 레이블을 지정할 수있는 방법은 없지만 파티션 만 표시하는 것 같습니다. 답은 아마 "아니오"입니다.

@cas와 @ 200_success가 제안한 제안에 따라 갈 것입니다 : 디스크의 일련 번호를 베이 도어에 스티커로 붙입니다.

(@Stephane Chazelas가 제안한대로)이 파티션에 레이블을 붙일 수 있도록 각 디스크에 작은 파티션을 만드는 것도 옵션이지만, 나중에 시스템을 유지 관리해야하는 다른 사람에게는 너무 혼란 스러울 것입니다 .


1

udev디스크의 보장 된 고유 WWN (있는 경우)을 사용하여 규칙을 작성하고 그렇지 않은 경우 결합 된 공급 업체 및 일련 ID를 사용하여 규칙을 작성하십시오 .

  1. 필요한 값을 얻으십시오.

    udevadm info -q all /dev/<YOUR-DEVICE-HERE> | egrep "(WWN|SERIAL|VENDOR_ID)="
    
  2. 이 값들을 udev rules 과 같이 .

    ENV{DEVTYPE}=="disk", ENV{ID_WWN}=="0x5000c1cd31d48c87", SYMLINK+="4TBseagate"
    
    ENV{DEVTYPE}=="disk", ENV{ID_VENDOR_ID}=="0781", ENV{ID_SERIAL}=="SanDisk_Cruzer_Blade_4C530263101009    121490-0:0", SYMLINK+="8GBsandisk"
    
  3. udevadm trigger

에서 제공 한 값을 사용하여 심볼릭 링크의 이름을 자동으로 지정하려면 udevadm info -q all /dev/<YOUR-DEVICE>다음을 사용할 수 있습니다.

SYMLINK+="disk-$env{ID_VENDOR}-$env{ID_SERIAL_SHORT}"

만들 수도 있습니다 ENVATTRS더 짧은 고유 ID를 얻기 위해 값에서 변수 .


0

만약 너라면 ls /dev/disk-by-path/pci* ...

각 드라이브 베이에 대한 PCI 경로가 확실히 표시됩니다. 레이블이 올바르게 표시되도록 알려진 디스크 1 개만 사용하면됩니다.

용도 blkid /dev/disk-by-path/pci* 파티션이 PCI 경로에있는 디스크를 확인합니다.

해당 경로를 사용하여 마운트 할 수도 있습니다.


0

나는 @cas 솔루션을 좋아하지만 여기에 내 2 ¢가 있습니다.

for i in /dev/sd?
do
  echo "$i"
  /usr/sbin/smartctl -a "$i" | grep Serial
  /usr/sbin/smartctl -a "$i" | grep "Device Model"
  echo
done

-1

같이 디스크가 이미 표시되어 sda, sdb, sdc... 파티션이 다음에 예를 들어 표시되어 있습니다 sda: sda1,sda2 ...

디스크 및 파티션에 대한 모든 레이블을 ls /dev/sd*


4
불행히도 디스크를 한 컴퓨터에서 다른 컴퓨터로 또는 한 컨트롤러에서 다른 컨트롤러로 옮기면 이러한 장치 이름이 변경됩니다.
— dummzeuch
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.