lvm 스냅샷 장치를 마운트하려고 하면 다음 오류가 발생합니다.
$ sudo mount -o loop /dev/mapper/matrix-snap--of--core /home/me/mountpoint
mount: /home/me/mountpoint: mount(2) system call failed: File exists.
- "파일이 존재합니다"란 무엇입니까? 나에게 오류를 말하려고 하시나요?
- LVM 스냅샷 장치를 마운트하는 방법은 무엇입니까?
마지막으로 확인한 것은 2018년 10월이었지만 mount 명령은 "항상 작동했습니다". 존재하다이 질문은 3년 전에 받은 질문입니다.. 그런데 오류 메시지가 조금 다르고 2019년인데...
이것이 내 결과입니다 lsblk
.
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 465.8G 0 disk
└─sda1 8:1 0 465.8G 0 part
└─core 254:0 0 465.8G 0 crypt
├─matrix-swapvolume 254:1 0 4G 0 lvm [SWAP]
└─matrix-core-real 254:3 0 461.8G 0 lvm
├─matrix-core 254:2 0 461.8G 0 lvm /
└─matrix-snap--of--core 254:5 0 461.8G 0 lvm
sdb 8:16 1 59.5G 0 disk
└─matrix-snap--of--core-cow 254:4 0 59.5G 0 lvm
└─matrix-snap--of--core 254:5 0 461.8G 0 lvm
저는 Parabola Linux를 실행하고 있으며 시스템이 최신 상태입니다. 논리 볼륨 /dev/matrix/core
사용량 btrfs
, 이것이 버그와 관련이 있는 것으로 의심됩니다. 이것이 내 결과입니다 uname -rvs
.
Linux 5.2.5-gnu-1 #1 SMP PREEMPT Sun Aug 4 02:02:20 UTC 2019
답변1
-o loop
( LVM 스냅샷 장치는 원시 디스크 장치만큼 우수하다고 가정되기 때문에 마운트 옵션을 사용하려는 이유를 잘 모르겠습니다 .)
"파일이 존재합니다"는 값이 17 또는 .인 표준 영어 errno
텍스트 EEXIST
입니다 #include <errno.h>
.
시스템 호출은 이 오류 결과를 기록하지 않으므로 mount(2)
일부 소스 코드를 읽어야 합니다.
Linux 커널 상호 참조는 elixir.bootlin.com에 있습니다.EEXIST가 사용되는 커널 코드의 모든 위치를 나열할 수 있습니다. btrfs
루프에서 파일 시스템을 마운트하려고 하므로 관련될 수 있는 위치는 다음과 같습니다.
drivers/block/loop.c
, 사이클 장비 관리 관련fs/btrfs/super.c
, 이는 파일 시스템을 마운트할 때 사용됩니다btrfs
.
에서 이미 사용 중인(예: 점유된) 특정 루프 장치를 할당하려고 하면 drivers/block/loop.c
오류 가 발생합니다 . 그러나 mount 명령으로 경쟁 조건을 만드는 것이 없다면 여기서는 문제가 되지 않습니다.EEXIST
mount -o loop=/dev/loop3 ...
/dev/loop3
실제로 오류 코드를 오류 메시지로 변환하는 특정 기능이 fs/btrfs/super.c
있습니다 . 로 btrfs
번역됩니다 .EEXIST
Object already exists
이미 마운트된 파일 시스템의 복제본 처럼 보이는 것을 마운트하려고 하므로 btrfs
실제로 의미가 있습니다. 역사적으로 이것은 혼란스러웠지만 btrfs
어느 시점에서 (현명하게) 추가된 것 같습니다 일부 보호.
이 것 같으니까LVM 레벨내장된 스냅샷 기능을 사용하여 생성된 스냅샷과 달리 스냅샷은 btrfs
원래 파일 시스템이 마운트된 동안 스냅샷을 마운트하려면 스냅샷을 복제 파일 시스템으로 처리해야 합니다. LVM만이 그것이 스냅샷이라는 것을 "인식"합니다. , 실제로 1:1 클론은 아닙니다. 따라서 원본 파일 시스템과 동일한 시스템에 스냅샷/복제 파일 시스템을 마운트해야 하는 경우 스냅샷/복제 파일 시스템의 메타데이터 UUID를 변경해야 합니다.
경고하다:저는 이 분야에 대한 경험이 많지 않기 btrfs
때문에 다음 내용이 틀렸거나 불완전할 수 있습니다.
커널 버전이 5.0보다 높으므로 btrfstune -m /dev/mapper/matrix-snap--of--core
. 그렇지 않으면 파일 시스템 수퍼 블록의 필드 btrfstune -u /dev/mapper/matrix-snap--of--core
뿐만 아니라 모든 파일 시스템 메타데이터를 업데이트해야 하므로 더 느린 명령을 사용해야 합니다 .metadata_uuid
답변2
파티션의 UUID를 변경한 후 이 문제가 있는 BTRFS 파티션을 성공적으로 마운트했습니다.
답변3
장치가 이미 다른 곳에 설치되어 있는 경우 오류가 발생합니다. 먼저 제거해야 합니다. 그런 다음 새 마운트를 생성할 수 있습니다.
답변4
Docker 컨테이너가 컨테이너에도 탑재된 호스트의 탑재 지점에 계속 액세스하려고 하기 때문에 이러한 상황이 발생합니다. 연결이 끊어진 외부 USB 드라이브이며 컨테이너로 인해 다시 마운트할 수 없습니다. 다시 설치하기 전에 컨테이너를 중지하면 문제가 해결되었습니다.