원래 질문

원래 질문

원래 질문

그래서 새 BTRFS 풀의 하위 볼륨을 /home. 나는 운명에 맡기고 컬렉션을 다시 만들기 시작했습니다.

나중에 내장된 "Baobob" 디스크 사용 유틸리티를 실행했습니다. /mnt/wd예상보다 많은 것을 밝혀줍니다 . 좀 더 주의 깊게 살펴봤습니다. ( /mnt/wd/home/$USER/multimedia이동 후 넣은 파일 이 아닌) "잃어버린" 파일은 모두 여전히 남아 있습니다 (BTRFS 시스템의 루트 디렉터리에는 레이블이 있습니다).~/multimediawd

되돌아보면 ~/multimedia이전 파일은 사라졌지만 새 파일은 여전히 ​​남아 있습니다.


파일 간의 공통점 상실

처음에 손실된 파일에는 한 가지 공통점이 있습니다. 새 드라이브에 복사하기 전에 누락되지 않은 파일은 ext4으로 설치된 파티션 에 있었습니다 /home. 모든 작업은 ntfs으로 설치된 이전 드라이브의 파티션에서 이루어졌으며 /media/$USER/data심볼릭 링크는 를 가리킵니다 /home/$USER. 듀얼 부팅을 수용하기 위한 것이었지만 사용을 중단했습니다. 모든 것을 새 볼륨에 복사할 때( rsync관련된 경우 사용) 모든 파일을 분할하고 심볼릭 링크를 만드는 대신 하위 볼륨에 넣습니다(두 디렉터리가 모두 완료된 후 mv한 디렉터리의 내용을 다른 디렉터리에 복사했습니다). rsync나는 이 결과를 결정하기 전에 하위 디렉터리를 조금 만지작거렸지만 결국 내가 찾을 수 있는 최고의 디렉터리를 얻었습니다. /home이는 새 하위 볼륨이 . 이후에는 /home원본 파티션과 일치하는 보기가 나타나고 병합된 버전과 일치하는 /home보기가 나타납니다./mnt/wd/home


초기 구성/상태

fstab현재 내 상태는 다음과 같습니다.

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p5 during installation
UUID=699ad207-3b40-4caa-9926-503830121327 /               ext4    errors=remount-ro 0       1
# BTRFS pool
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /home   btrfs   defaults,autodefrag,subvol=home 0   2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /mnt/app_drive  btrfs   defaults,autodefrag,subvol=applications 0   2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /mnt/snapshots  btrfs   defaults,autodefrag,subvol=snapshots    0   2
# Swap file
/swapfile1 none swap sw 0 0

/mnt/wd또한 BTRFS 볼륨의 루트 디렉터리도 마운트했습니다 sudo mount UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05 /mnt/wd.

sudo btrfs subvolume list .모든 하위 볼륨(또는 루트)의 설치 위치에서 실행:

ID 638 gen 4492 top level 5 path home
ID 639 gen 4433 top level 5 path applications
ID 640 gen 4404 top level 5 path snapshots
ID 800 gen 4402 top level 640 path snapshots/home_2017-07-06

그러나 ls ./$USER/multimedia(및 기타 누락된 디렉터리)는 /home에서 실행하거나 에서 실행할 때 완전히 다른 내용을 표시합니다 /mnt/wd/home.

qwertystop@dt /home $ ls $USER/multimedia
pics  unprepared
qwertystop@dt /home $ cd /mnt/wd/home
qwertystop@dt /mnt/wd/home $ ls $USER/multimedia
3d  ml_resource  music  osu!  phone-ready  pics  Unprepared  vids

여기서 무슨 일이 일어나고 있는지, 아니면 두 가지를 어떻게 조정할 수 있는지 아는 사람이 있나요? 아이디어는 한 파일에서 다른 파일로 모든 것을 복사하는 것입니다. 하지만 이는 여전히 가능한 최선의 방법으로 모든 새 파일에 대해 이 작업을 수행해야 함을 의미합니다.


추가 실험

스냅 사진

스냅샷을 만들어 보려고 합니다. 스냅샷을 생성하는 데 어떤 마운트 지점을 사용하든, 어디에 배치하든 항상 시도한 버전이 /mnt/wd/home아닌 에서 찾은 버전과 일치합니다 /home.

sudo btrfs subvolume snapshot /home /home/snapshot
sudo btrfs subvolume snapshot /mnt/wd/home /mnt/snapshots/snapshot
sudo btrfs subvolume snapshot /home /mnt/snapshots/snapshot

그들은 모두 동일합니다. 이는 내부 일관성에 도움이 되지만 파일에 액세스하려고 할 때 불일치가 지속되는 이유를 알려주지는 않습니다.


fstab/설치 실험:

boot 이후 에 BTRFS 루트 를 사용하는 대신 fstab에 BTRFS 루트를 마운트하려고 했습니다 /mnt/wd(라인이 라인 앞에 위치함 ) ./homemountfstab

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/nvme0n1p5 during installation
UUID=699ad207-3b40-4caa-9926-503830121327 /               ext4    errors=remount-ro 0       1
# BTRFS pool
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /mnt/wd   btrfs   defaults,autodefrag 0   2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /home   btrfs   defaults,autodefrag,subvol=home 0   2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /mnt/app_drive  btrfs   defaults,autodefrag,subvol=applications 0   2
UUID=24f6bbb6-cccb-4f12-808c-195f18b19e05   /mnt/snapshots  btrfs   defaults,autodefrag,subvol=snapshots    0   2
# Swap file
/swapfile1 none swap sw 0 0

이것은 아무런 차이를 만들지 않았습니다.

나는 열심히 노력했다아니요/home기본 하위 볼륨을 완전히 마운트합니다 fstab(라인 주석 처리). 그런 다음 해당 줄의 주석 처리를 제거하고 설치했을 때 /home결과 설치 드라이브는 /mnt/wd새 파일 대신 이전 파일과 일치했습니다.그럼 시작 시 불안정해질 수 있다고 생각한 걸까요?

"변경되지 않은" 파일에는 여전히 의견 차이가 있습니다.

파일 시스템은 두 버전 간에 별도로 손실되지 않은 파일을 계속 추적하고 있습니다. 따로 살펴보니 tail .bash_history다 다르다는 걸 알았습니다.

마운트 지점과 하위 볼륨 조합에 문제가 있습니까?

대신 home에 하위 볼륨을 마운트 하고 나중에 다시 시도했습니다 . 이전 버전과 일치합니다. 하위 볼륨의 스냅샷을 만들고 이름을 지정한 다음 에 마운트했습니다 ./mnt/foo/foo/homehomenewhome/home새 버전과 일치합니다(이전 파일이 누락되고 새 파일이 표시됨).

새 버전에만 있는 디렉터리 중 하나에 새 파일을 추가했습니다(여전히 newhome). 다시 설치 home하고 /home재부팅했습니다. 파일이 없습니다. 다시 사용으로 변경해 newhome도 파일이 여전히 존재합니다. 다른 순서로 동일한 작업을 수행하고(버전에 넣고 home확인 newhome) 파일을 다르지 않은 디렉토리 중 하나에 넣습니다. 결과는 동일합니다. 파일은 해당 파일이 포함된 하위 볼륨에만 존재하며 최신 버전에만 존재합니다(설치된 경우에만 해당 /home하지만 버전마다 다릅니다). 이는 /home"마운트 지점에 마운트된 하위 볼륨"을 어떤 이유로든 실제로 마운트한 하위 볼륨과 다른 것으로 취급한다는 최근 생각을 배제합니다 .

관련 없는 하위 볼륨을 가져와 내 사용자 이름에 대한 하위 디렉터리를 추가하고 에 마운트했습니다 /home. 결과적으로 OS는 여전히 내 사용자 이름/비밀번호를 인식했지만 마치 새 사용자인 것처럼 해당 볼륨과 디렉터리에 있는 모든 구성 파일을 다시 생성했습니다. 그것아니요파티션의 "새 버전"을 사용하십시오 /home.

이제 상황을 정리할 수 있을 것 같습니다. 이는 문제를 해결하거나 원인을 파악하는 데 도움이 되지 않습니다.

너무 길어요.

"home"이라는 하위 볼륨과 파생된 스냅샷은 실제로 두 개의 하위 볼륨입니다. 그 중 하나는 마운트된 경우에만 나타나고 /home다른 하나는 다른 곳에 마운트되거나 BTRFS 장치 루트 볼륨 풀의 하위 디렉터리로 표시되는 경우에만 나타납니다. 알 수 없는 이유로 두 가지가 처음 설치하기 직전 어느 시점에서 분기되었으므로 /home설치된 버전에는 /home-ed를 통해 덮어쓴 이전 파티션의 내용이 포함되어 있는 반면, 다른 버전에 설치된 버전은 해당 위치의 버전입니다. 초기화 후에 파일 시스템을 수정했기 때문에 파일 시스템이 포함되어 있습니다(다른 파티션에 대한 여러 심볼릭 링크를 이전에 링크된 파일로 대체)./homersyncrsync

왜 이렇게 되어야 하는지 모르겠습니다. "home"에서 파생되지 않은 하위 볼륨이 마운트되고 "home"의 파일이 복사되지 않으면 이런 일이 발생하지 않는다는 것을 확인할 수 있습니다 /home. 파일의 작은 부분을 새 하위 볼륨에 복사할 때 이런 일이 발생한다는 것을 확인할 수 있습니다. 이제 스냅샷을 찍는 대신 모든 파일 복사를 테스트해 보겠습니다 cp.

이는 훌륭하게 작동하지만 문제를 지적할 수 있는 까다로운 부분이 있습니다. 새로운 기본 하위 볼륨 cp -a --reflink=always ./*에서 시작 하려고 하면 /home/qwertystop각 파일에 대해 "교차 장치 링크가 유효하지 않습니다."라는 오류 메시지가 표시됩니다. 와 관련된 동일한 명령을 실행할 때는 이런 일이 발생하지 않습니다 /mnt/wd/home/qwertystop.문제는 한 마운트 위치를 다른 마운트 위치와 다른 장치로 읽는 컴퓨터로 인해 발생하거나 이와 관련되어 있는 것으로 보입니다.나는 이것이 기술적으로 가능하다고 생각합니다. 이는 세 가지 다른 장치로 구성된 BTRFS 풀입니다.

복제된 버전으로 전환했을 때 /mnt/wd/home처음에는 작동하는 것처럼 보였지만 조금만 사용해보면 새 하위 볼륨에 나타나는 중복 항목이 이전 하위 볼륨의 것과 동일하다는 사실이 금방 드러났습니다.

답변1

나는 이 문제를 다루었지만 이것이 왜 문제인지 또는 원래 불일치가 어디서 왔는지에 대한 관련 질문은 아닙니다.

홈 디렉터리를 새 하위 볼륨에 복사하지만 /home/.ecryptfs는 복사하지 않으면 복사가 중지됩니다. 따라서 중복은 .ecryptfs에 의해 발생한 것 같습니다. 이것이 버그인지, 아니면 내가 알지 못하는 일부 시스템의 예상되는 동작인지는 확실하지 않습니다.

시스템에 설치된 암호화를 비활성화했습니다.

ecryptfs는 스택 파일 시스템입니다. 로그인할 때, 즉 사용자가 데이터를 암호화하는 데 사용할 비밀번호를 입력할 때 설치할 수 있습니다. (또는)은 findmnt에 설치된 mount파일 시스템 유형을 표시합니다. 작성된 파일은 ecryptfs로 암호화된 후 어딘가(예: btrfs)에 저장됩니다. 이것은 ecryptfs 설정 중 하나일 뿐입니다. 이를 구성하는 다른 방법이 있습니다.ecryptfs/home/$USER/home/$USER//home/.ecryptfs/$USER/

나는 그것을 사용한 적이 없으므로 위의 설명을 따지지 마십시오. 여기에서 커뮤니티 제공 문서를 찾을 수 있습니다.

https://help.ubuntu.com/community/EncryptedHome#Encrypted_Home

이는 마운트된 btrfs 볼륨을 사용하여 로그인 하고 홈 디렉토리를 살펴보면 에 /home마운트되었을 때 동일한 btrfs 볼륨의 디렉토리 /home/$USER에서 볼 수 있는 것과 비교하여 일부 다른 파일이 표시되는 이유를 설명합니다.$USER//mnt

"교차 장치 링크가 유효하지 않습니다." /mnt/wd/home/qwertystop과 관련된 동일한 명령을 실행할 때 이 문제가 발생하지 않습니다. 문제는 한 마운트 위치를 다른 마운트 위치와 다른 장치로 읽는 컴퓨터로 인해 발생하거나 이와 관련되어 있는 것으로 보입니다.

유감스럽게도 "기기 간 연결"은 잘못된 명칭입니다. 이는 실제로 파일 시스템 간 링크입니다. btrfs 파일 시스템에서 ecryptfs 파일 시스템으로 파일을 하드 링크하거나 참조 링크할 수 없으며 그 반대의 경우도 마찬가지입니다.

스냅샷을 만들어 보려고 합니다. 스냅샷을 생성하는 데 어떤 마운트 지점을 사용하든, 어디에 배치하든 항상 /mnt/wd/home에 있는 버전과 일치합니다.

이제 어떻게 이런 일이 발생하는지 볼 수 있어야 합니다.

경고: 로그인되어 있고 ecryptfs가 설치된 상태에서 스냅샷을 복원하거나 백업 저장소를 조작하는 것은 매우 우려되는 일입니다. 대신, 루트 사용자를 활성화하거나 암호화되지 않은 홈 디렉터리가 있는 특수 관리자 사용자 계정을 생성하고 /home 스냅샷을 복원해야 하는 경우 해당 계정을 사용할 수 있습니다.

답변2

나는 이 문제를 다루었지만 이것이 왜 문제인지 또는 원래 불일치가 어디서 왔는지에 대한 관련 질문은 아닙니다.

홈 디렉토리를 새 하위 볼륨에 복사했지만 아무것도 복제되지 않으면 /home/.ecryptfs복제가 중지됩니다. 그래서 중복은 뭔가에 의해 발생한 것 같습니다 .ecryptfs. 이것이 버그인지, 아니면 내가 알지 못하는 일부 시스템의 예상되는 동작인지는 확실하지 않습니다.

관련 정보