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


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.