원래 장치의 파일을 교체하고 파일 시스템 무결성을 유지하려면 어떻게 해야 합니까?

원래 장치의 파일을 교체하고 파일 시스템 무결성을 유지하려면 어떻게 해야 합니까?

Linux 시스템이 있고 원시 장치에 쓰고 싶다고 가정해 보겠습니다. 그런데 이 장치의 특정 파일을 새 버전으로 교체하고 싶습니다. 이것이 달성될 수 있습니까? dd를 사용하면 이전 버전의 오프셋부터 시작하여 새 파일을 작성할 수 있다고 생각합니다. 새 파일의 크기가 이전 파일과 같거나 작다면 모든 것이 괜찮을 것입니다. 하지만 새 파일이 더 크지만 디스크 자체가 가득 차지 않으면 어떻게 될까요? 다른 파일을 덮어쓰고 파일 시스템을 손상시키나요? 그렇다면 이런 일이 발생하는 것을 방지할 수 있나요? btrfs와 같은 압축 파일 시스템의 파일도 교체할 수 있나요?

답변1

파일 시스템을 마운트해야 합니다. "이전 버전과의 오프셋" 같은 것은 없습니다.조각난. 데이터를 수정하려면 모든 조각의 오프셋과 크기를 찾아야 합니다. 새 버전의 크기가 다른 경우 상황은 더욱 악화됩니다. 추가 데이터를 위한 여유 공간이 어디에 있는지 파악해야 하며, 새 블록의 위치를 ​​나타내기 위해 디렉터리 데이터 구조를 업데이트해야 합니다.

이를 수행하기 위해 파일 시스템 디버거에서 일부 코드를 찾을 수 있지만 안정적으로 사용하기 어렵고 일반적으로 많은 쓰기를 지원하지 않습니다. 파일 시스템의 데이터를 수정하기 위한 사용하기 쉽고 신뢰할 수 있는 유일한 코드는 파일 시스템을 마운트하여 액세스하는 파일 시스템 드라이버입니다.

일부 파일 시스템(예: zfs 및 btrfs의 선택적 기능)에는 파일 무결성 데이터도 있습니다. 파일 또는 블록의 체크섬을 유지하여 데이터 손상을 감지합니다. 이러한 파일 시스템에서는 해당 무결성 데이터를 변경하지 않고 파일의 데이터 블록 내용을 변경하면 파일이 손상되므로 읽을 수 없습니다.

어떤 경우에는 파일 크기를 변경하지 않고 드라이버를 우회하여 파일의 데이터를 덮어쓸 수 있습니다. 예를 들어 일부 파일 시스템은 읽기 전용으로 설계되었습니다(즉, 파일 시스템을 준비한 다음 이를 일부 파일 시스템에 기록합니다). 플래시하고 업데이트하지 마세요). 데이터가 압축된 경우 이는 다음 경우에만 가능합니다.압축물론 크기는 동일하게 유지됩니다. 그러나 일반적으로 말하면 설치가 유일한 방법입니다.

관련 정보