이것은 극단적인 경우일 수 있지만 여기서는...
2TB 하드 드라이브에서 데이터를 복구하고 있습니다. 제가 사용해야만 설치가 가능하며 mount -r
, 중요한 디렉토리를 복사하는데 사용합니다 rsync --files-from
.
가끔씩 실패하여 다시 시작해야 합니다. 전체 디렉토리 트리를 캐시하고 해당 캐시를 사용할 수 있는 방법이 있었으면 좋겠습니다.여러 마운트에 걸쳐: 즉, 디스크를 다시 마운트해야 할 때 디스크에서 추가 조회를 수행하는 대신 파일 조회를 위한 캐시를 제공합니다.
dd
백업 공간이 부족하여 디스크를 완전히 이미지화할 수 없다고 가정합니다(또는 사용 ).ddrescue
답변1
(또한) 이를 수행하는 유일한 방법은 블록 계층에서 작동하기 때문에 사용되는 파일 시스템과 독립적이라고 생각합니다.
원하는 것은 일종의 lvmcache입니다. 장치에 대해 설정한 다음 파일 시스템 메타데이터( find /path/to/mountpoint -perm 700 -printf ""
)를 읽어 캐시 장치에 복사한 다음 캐시 장치를 고정합니다.
불행하게도 lvmcache에는 그러한 동결 기능이 없는 것 같습니다.
하지만 비슷한 작업을 수행할 수 있습니다. 즉, 스냅샷을 설정할 수 있습니다. LVM은 볼륨 그룹 내에서만 지원하므로 이 작업을 수동으로 수행해야 합니다. VG에서 스냅샷을 생성하고 관련 장치의 세부 정보를 봅니다 dmsetup ls
. 문제의 장치가 볼륨 그룹에 속하는지(또는 LVM 장치인지) 여부는 중요하지 않습니다.dmsetup table
dmsetup
일반적으로 스냅샷을 생성하고 기본 디바이스를 계속 사용합니다. 스냅샷을 복원하면 원래 장치에서 변경되기 전에 원래 데이터가 스냅샷에 기록되었기 때문에 기본 장치의 이전 상태를 복원할 수 있습니다. 당신이 원하는 것이 아닌가요? 소스 장치에 대한 액세스를 최소화하려고 합니다. 따라서 (새) 원래 장치가 아닌 스냅샷 장치를 마운트합니다.
그러면 메타데이터가 포함된 모든 섹터가 수정되어 스냅샷 장치에 기록됩니다. 두 번 써서(데이터를 변경한 다음 다시 원래 상태로 변경하기 때문에) 데이터 자체가 전혀 변경되지 않더라도 섹터는 스냅샷 장치의 일부로 유지됩니다. 이는 항상 스냅샷 장치에서 읽는다는 의미입니다. 충돌이 발생하면 dmsetup
구성을 복원하기만 하면 더 이상 메타데이터를 위해 원래 장치에 액세스할 수 없습니다.
그러나 상당히 큰 스냅샷과 더 작은 클러스터 크기가 필요할 수 있습니다. 하지만 전체 파일 시스템 메타데이터를 한 번에 캐시할 필요는 없습니다. 스냅샷을 설정하고, 디렉터리 트리의 메타데이터를 캐시하고, 거기에서 모든 파일을 복사하고, 스냅샷을 삭제하고, 새 스냅샷을 만들고, 다음 하위 트리의 메타데이터를 캐시할 수 있습니다. dmsetup status
사용 중인 스냅샷 공간의 양을 확인할 수 있습니다(IIRC 포함 ).
inode에 쓰려면 touch /path/to/file
특히 원래 값이 필요하지 않은 경우 타임스탬프( )를 변경할 수 있습니다. 또는 (아마도 원래 값을 어딘가에 쓴 후) 예를 들어 chmod o=rwx /path/to/file ; chmod o= /path/to/file
디렉토리 항목에 속하는 모든 섹터를 쓰려면 모든 파일의 이름을 사용하지 않은 이름으로 바꿀 수 있습니다.
unique_suffix=4itxIIq5kyGhMVPJ
mv "$file" "${file}${unique_suffix}"
mv "${file}${unique_suffix}" "$file"
페이지 캐시가 변경된 사항이 없음을 감지할 만큼 스마트한지 확신할 수 없으므로 스냅샷이 실제로 작성되었는지 확인할 수 있습니다.
모든 파일에 대한 이러한 작업은 다음 명령을 사용하여 수행해야 합니다(하위 디렉터리에만 해당).
find /path/to/mountpoint -type f -exec ... + # for chmod and mv
find /path/to/mountpoint -type d -exec ... + # for mv