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