실제 파일 시스템을 구출

실제 파일 시스템을 구출

훌륭한 질문이 있었는데, 안타깝게도 제가 다소 광범위한 답변을 작성하는 동안 삭제되었습니다. :(

이러한 노력을 낭비하고 싶지 않기 때문에 질문 텍스트와 의견을 통해 문제를 설명하겠습니다.

dd파일 덮어쓰기를 사용하면 조각화가 증가하는 것으로 나타났습니다 . dd조각화를 일으키지 않는 대안을 찾고 있습니다 .

조각화가 어떻게 발생하는지에 대한 예로서 전체 파일 시스템을 차지하는 파일을 상상해보십시오. 덮어쓰기를 시작하면 파티션이 완전히 "무료"가 되는 방법을 즉시 확인할 수 있으며 동시에 다른 파일을 여기에 쓸 수 있습니다. 블록은 동적으로 할당되며 파일을 덮어쓰면 이전 블록이 재사용된다는 보장이 없습니다.

저는 여러 파일 시스템(ext2, 3, 4, XFS, FAT32, NTFS)과 여러 운영 체제(win95부터 최신 Fedora까지)에서 이 동작을 관찰했습니다.

나는 이것이 파일 시스템 및 운영 체제와 아무 관련이 없다고 확신합니다.

내 주요 파일 시스템은 Bog 표준 ext4입니다. FedoraROOT: 103874/1310720 파일(0.2% 비연속), 1754833/5242880 블록. 최소한의 전체 조각.


알아채다나는 이것을 직접 관찰할 수 없었습니다. 나는 이 단편적인 진술의 원래 질문자를 믿습니다!

답변1

너무 길어요 박사님! 대신 어떤 도구를 사용해야 합니까 dd?: 예 cp, GNU coreutils가 충분히 새로운 경우입니다.

실제 파일 시스템을 구출

이것은 파일 시스템과 운영 체제가 전혀 독립적이지 않습니다! 블록-파일 할당은 특정 파일 시스템에 따라 다르며 파일 시스템마다 다릅니다. 그래서할 수 없다엄격하게 독립적입니다!

Ext4의 지연 할당이 도움이 됩니다

Ext4 지원새로 고칠 때 할당됨:블록은 이전이 아닌 데이터가 디스크에 플러시될 때 파일에 할당됩니다. 이는 귀하의 시스템(현대 Fedora는 확실히 그렇습니다)이 파일 시스템 버퍼를 사용하는 경우 순차적으로 확장된 파일에 대한 할당 크기가 매우 커서 조각화가 매우 낮다는 것을 의미합니다. 활성화할 수 있으며 나중에 아무 것도 할 필요가 없으며 그냥 cpor를 사용하면 됩니다( 이 방법은 첫 번째 문제뿐만 아니라 두 번째 문제도 해결하기 때문에 dd선호합니다 !).cp

ext4에서는 이것을 호출합니다.지연 할당; delalloc설치 옵션만 추가하면 됩니다! (바라보다 man ext4)

cp최신 Fedora에서 will 호출을 사용하면 copy_file_range콘텐츠를 디스크에 플러시하는 동안 연속 할당이 발생합니다.

XFS가 구출됩니다

XFS는 기본적으로 지연 할당을 수행합니다. ext4를 참조하세요.

동일한 파일 시스템:reflink

cpFedora >=34 또는 GNU coreutils >=9.0 을 사용할 때 cp지원됩니다 . reflinks즉, 간단히아니요데이터를 복제하는 대신 두 파일에서 사용되는 블록을 표시하고 둘 중 하나가 변경될 때 복사본을 하나만 만드십시오. 이것은 매우 좋은 기능이지만 물론 소스 파일과 대상 파일이 동일한 파일 시스템에 있는 경우에만 작동합니다.

결과적으로 대상 파일은 실제로 동일한 블록이기 때문에 원본 파일과 동일합니다(조각화 없음).

다양한 파일 시스템: XFS 할당 그룹

XFS는 전체 파일 시스템의 여유 공간과 사용 공간을 "한 가지"로 관리하지 않습니다.과제 그룹. 인용하다 man xfs:

데이터 섹션에는 모든 파일 시스템 메타데이터(inodes, 디렉터리, 간접 블록)는 물론 일반(비활성) 파일에 대한 사용자 파일 데이터와 로그 영역(로그가 데이터 섹션 내에 있는 경우)이 포함됩니다. 데이터 부분은 할당 그룹으로 나뉩니다. 할당 그룹의 수와 크기는 mkfs.xfs(8)에 의해 선택되므로 일반적으로 동일한 크기의 소수의 그룹이 있습니다. 할당 그룹의 수는 파일 및 블록 할당에서 사용 가능한 병렬 처리 수준을 제어합니다. 메모리가 충분하고 할당 활동이 많은 경우 기본값을 늘려야 합니다. 할당 그룹 수를 너무 높게 설정하면 안 됩니다. 특히 파일 시스템이 거의 가득 찼을 때 파일 시스템이 많은 CPU 시간을 사용할 수 있기 때문입니다. xfs_growfs(8)를 실행하면 더 많은 할당 그룹(원래 크기)이 추가됩니다.

따라서 "조각화로 이어지는 동시 할당" 문제를 해결하려면 충분한 할당 그룹만 있으면 됩니다! 적당한 크기의 몇 가지 파일 시스템을 예상했지만 기본값에서 개수를 늘리는 것만으로도 충분했습니다(4-장치 스트라이프 LVM 볼륨에 5를 사용했기 때문에 성능이 좋은 것 같았습니다). 그러나 할당 그룹 수를 늘리려면 스토리지를 다시 포맷하거나 추가해야 합니다.

구조 도구

dd파일을 다른 파일로 덮어쓰는 데 선호되는 도구는 아닙니다. cp예, 현재 버전(9.0)과 Fedora와 함께 제공되는 버전(Fedora 패치가 포함된 8.32) 모두에서 작동하며 copy_file_range최종적으로 복사될 데이터의 양을 기본 파일 시스템에 알려줍니다. - 이런 식으로 할당 그냥 블록에서 하세요.

관련 정보