사용되지 않는 볼륨을 삭제할 수 없습니다.

사용되지 않는 볼륨을 삭제할 수 없습니다.

USB를 통해 Ubuntu 노트북에 외장 하드 드라이브가 연결되어 있습니다. 전체 하드 드라이브는 LUKS로 암호화됩니다. 암호화 계층 옆에는 내가 마운트한 LVM 볼륨이 있습니다 /mnt/es. 개봉 후 lsblk보이는 모든 것은 다음과 같습니다.

sdc                                          8:32   0   2.7T  0 disk  
└─es (dm-6)                                252:6    0   2.7T  0 crypt 
  └─externalstorage-externalstorage (dm-7) 252:7    0   2.7T  0 lvm   /mnt/es

때로는 하드 드라이브가 어떤 방식으로든 볼륨에서 "분리"되어 데이터에 액세스할 수 없게 되는 경우가 있습니다.

sdc                                        8:32   0   2.7T  0 disk  
es (dm-6)                                252:6    0   2.7T  0 crypt 
└─externalstorage-externalstorage (dm-7) 252:7    0   2.7T  0 lvm

나는 이것이 일반적으로 노트북이 절전 모드로 전환될 때 발생한다는 것을 알았습니다.

이제 질문은, 한때 sdc[는? ] 분리된 경우, 이 두 권의 쓸모없는 책을 제거 es하고 externalstorage-externalstorage해당 이름을 다시 재사용 할 수 없습니다 . 내가 가장 먼저 한 일은 umount /mnt/es모든 일이 잘 진행되었다는 것이었습니다. 그러나 볼륨이 마운트되지 않았더라도 삭제할 수 없습니다.

dmsetup remove --force /dev/mapper/externalstorage-externalstorage
device-mapper: resume ioctl on externalstorage-externalstorage failed: Invalid argument
device-mapper: remove ioctl on externalstorage-externalstorage failed: Device or resource busy
Command failed

info명령은 볼륨이 열려 있음을 보여줍니다.

dmsetup info -c /dev/mapper/externalstorage-externalstorage
Name                            Maj Min Stat Open Targ Event  UUID                                                                
externalstorage-externalstorage 252   7 L--w    1    1      0 LVM-R4bAWzxJ8Cy3MBIjmPps60Rd3cFVyBStxTeKaR6gBHdefTYfJNWhHfA8tzqOBHns

이것이 볼륨을 높이는 것으로 보이지만 나에게 많은 것을 말해주지는 않습니다.

fuser -m /dev/mapper/externalstorage-externalstorage
Cannot stat file /proc/5687/fd/4: Stale file handle
Cannot stat file /proc/5687/fd/5: Stale file handle
Cannot stat file /proc/5687/fd/6: Stale file handle
Cannot stat file /proc/5687/fd/7: Stale file handle
Cannot stat file /proc/5687/fd/11: Stale file handle

LVM의 관점에서도 액세스할 수 없습니다.

pvdisplay
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981780979712: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981781037056: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 0: Input/output error
  /dev/externalstorage/externalstorage: read failed after 0 of 4096 at 4096: Input/output error

흥미롭게도 이 작업은 cryptsetup luksClose es눈에 띄는 효과나 오류 메시지 없이 여러 번 반복될 수 있습니다.

그렇다면 이러한 오래된 볼륨을 어떻게 제거할 수 있습니까(재부팅 제외)? 애초에 문제가 발생하지 않도록 예방할 수 있는 방법은 없을까요, 즉 왜 sdc가끔씩 분리되는 걸까요?

[Ubuntu 14.04.3 LTS, 커널 3.19.0-42-일반]

고쳐 쓰다

vgchange -an위와 유사한 오류가 발생합니다.

/dev/mapper/es: read failed after 0 of 4096 at 3000590794752: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 3000590876672: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 0: Input/output error
/dev/mapper/es: read failed after 0 of 4096 at 4096: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981780979712: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 2981781037056: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 0: Input/output error
/dev/externalstorage/externalstorage: read failed after 0 of 4096 at 4096: Input/output error

답변1

이것은 추측에 가깝지만 기본적으로 내부에서 돌아가서 crypt 매핑을 삭제하기 전에 lvm을 비활성화해야 하는 것처럼 보입니다.

먼저, lvm에서 사용되지 않는 파일 시스템을 마운트 해제해야 합니다:

umount -f /mnt/es

그런 다음 가지고있는 것 같은 lvm을 비활성화하십시오.위에비밀번호 설정. 다른 vgs가 있더라도 다음은 다른 vg를 사용하여 시스템에 해를 끼치지 않고 가능한 모든 기능을 비활성화해야 합니다.

vgchange -an

나중에 dmsetup을 사용하여 cryptsetup(!)에 의해 생성된 매핑을 삭제할 수 있습니다.

dmsetup remove externalstorage

(몇몇 이름은 잘못 기억하고 있을 수도 있으니 정정해주세요)

이는 절전 모드 중에 USB 드라이브가 버스에서 떨어지고 다시 돌아올 때 현재 sdc가 있음에도 불구하고 블록 시스템에서 sdb가 사라진 것을 확인하는 기본적인 문제인 것 같습니다.

답변2

  1. 장치의 모든 사용자를 종료하고 필요한 경우 장치 데이터를 백업하십시오.
  2. umount장치가 마운트된 모든 파일 시스템을 마운트 해제 하는 데 사용됩니다 .
  3. 해당 장치를 사용하는 모든 md 및 LVM 볼륨에서 장치를 제거합니다. 장치가 LVM 볼륨 그룹의 구성원인 경우 pvmove 명령을 사용하여 장치에서 데이터를 이동한 다음 해당 vgreduce명령을 사용하여 물리 볼륨을 삭제하고 선택적으로 pvremove디스크에서 LVM 메타데이터를 삭제해야 할 수도 있습니다.
  4. 장치가 다중 경로를 사용하는 경우 multipath -l장치에 대한 모든 경로를 실행하고 기록해 둡니다. 그런 다음 멀티패스 장치 제거 를 사용하십시오 multipath -f device.
  5. 실행 중인 blockdev --flushbufs장치는 모든 미해결 I/O를 장치에 대한 모든 경로로 플러시합니다. 이는 I/O 플러시를 유발하는 umount 또는 vgreduce 작업이 없는 원시 장치의 경우 특히 중요합니다.
  6. 시스템의 응용 프로그램, 스크립트 또는 유틸리티에서 장치의 경로 기반 이름(예: 숫자)에 대한 /dev/sd참조를 제거합니다 /dev/disk/by-path. major:minor이는 나중에 추가되는 다른 장치가 현재 장치로 착각되지 않도록 하는 데 중요합니다.
  7. 마지막으로 SCSI 하위 시스템에서 장치에 대한 각 경로를 제거합니다. 이를 수행하려면 예를 들어 echo 1 > /sys/block/device-name/device/deletedevice-name이 될 수 있는 명령을 사용하십시오 sde. 이것의 또 다른 변형은 echo 1 > /sys/class/scsi_device/h:c:t:l/device/deleteHBA h번호, cHBA의 채널, tSCSI 대상 ID 및 lLUN입니다.

자세한 내용은 다음을 참조하세요.Red Hat 문서!

sg_utils스크립트를 사용하여 오래된 볼륨을 삭제할 수도 있습니다.다시 스캔-scsi-bus.sh!

관련 정보