
나는 원해요모두이유로 인해 ext4 파일 시스템의 파일이 조각화되지 않았습니다. 슬프게도 e4defrag
(여기에 조언:ext4 파일 시스템 조각 모음 방법) 여러 파일의 조각 모음에 실패했습니다. 내 대안은 무엇입니까?
파일 시스템에는 이미 모든 파일이 들어 있으며(어떠한 방식으로도 변경할 수 없음) 거의 꽉 찼습니다. df -h
버퍼로 사용할 수 있는 여러 개의 여유 블록(사용 가능한 85G 및 80G 중 434M에 따름)이 있습니다 . 조각 모음 중에는 파일 시스템을 마운트할 필요가 없습니다. 게다가 버퍼로 사용할 수 있는 충분한 공간이 있는 다른 파일 시스템도 있습니다.
내가 가진 한 가지 아이디어는 파일을 다른 파일 시스템으로 옮긴 다음 어떻게든 파일 시스템에 연속적으로 저장하도록 지시하여 다시 복사하는 것입니다.
[편집하다]
나는 e4defrag
출력에 의존할 수 없다는 것을 방금 발견했습니다. 범위가 연속되어 있다는 것을 알고 있는 동안 두 개 이상의 범위가 있는 파일을 조각화된 것으로 계산합니다.
$ sudo filefrag file.file
file.file: 1 extent found
$ sudo e4defrag -vc file.file
e4defrag 1.45.5 (07-Jan-2020)
<File>
[ext 1]: start 22388736: logical 0: len 32768
[ext 2]: start 22421504: logical 32768: len 32768
[ext 3]: start 22454272: logical 65536: len 32768
[ext 4]: start 22487040: logical 98304: len 27962
Total/best extents 4/1
Average size per extent 126266 KB
Fragmentation score 0
[0-30 no problem: 31-55 a little bit fragmented: 56- needs defrag]
This file (file.file) does not need defragmentation.
Done.
답변1
나는 ext4 파일 시스템의 모든 파일이 여러 가지 이유로 조각화되지 않기를 원합니다.
조각 모음을 수행해야 하는 타당한 이유가 있지만, 조각 모음이 필요한 이유는 없습니다.하나하나조각 모음을 수행하고 연속적으로 파일을 삭제합니다. 모든 파일 조각 모음을 원하는 주된 이유는 OCPD와 관련되어 있습니다. 이는 파일 시스템이 rw로 마운트된 직후 다시 "조각화"되기 때문에 완전한 시간 낭비입니다.
파일 시스템이...거의 꽉 찼습니다...
이 시나리오에서는 Linux 조각 모음 프로그램이 파일 수준에서 작동하는 경향이 있고 모든 파일 조각 모음을 수행할 충분한 연속 여유 공간이 반드시 필요한 것은 아니기 때문에 모든 파일 조각 모음을 수행할 수는 없습니다.
내가 가진 한 가지 아이디어는 파일을 다른 파일 시스템으로 옮긴 다음 다시 복사하는 것입니다.
이것이 가장 실행 가능한 옵션입니다. 그러나 특정 파일 할당은 파일 시스템 드라이버에 의해 결정됩니다.
블록을 재정렬하려면 하나의 여유 블록을 버퍼로 사용하는 것으로 충분합니다.
Linux 파일 시스템 개발자는 Windows 개발자와 동일한 우선 순위를 조각 모음에 부여하지 않았습니다. 따라서 문제는 기술적으로 불가능하다는 것이 아니라, 누구도 그렇게 하기 위한 프로그램을 작성하려고 애쓰지 않았다는 데 있습니다.
조각 모음 후 fs는 ro로 설정될 수 있습니다.
그런 다음 squashfs와 같이 ro 사용을 위해 설계된 파일 시스템을 사용하십시오. 모든 파일은 조각 모음되고 연속되며 심지어 압축됩니다.
답변2
일부 파일이 큰 경우 파일 시스템을 다시 포맷하지 않고 파일 조각 모음을 모두 수행하는 것은 기술적으로 불가능할 수 있습니다.
어느ext4 파일 시스템일련의 블록 그룹으로 구성됩니다. 기본적으로 각 블록 그룹의 길이는 128MiB입니다.
각 블록 그룹은 일련의 파일 시스템 메타데이터(수퍼블록, 그룹 설명자, 할당 비트맵 및 inode 테이블)로 시작하고 그 뒤에 해당 블록 그룹에 속하는 파일에서 사용되는 실제 데이터 블록이 옵니다. 이는 파일 시스템 메타데이터가 전체 장치에 걸쳐 대부분 균일하게 분산되어 있음을 의미합니다.
그러나 선택적 flex_bg
기능 덕분에 여러 블록 그룹을 하나의 더 큰 그룹으로 통합할 수 있습니다. mke2fs
2008년부터 기본적으로 16개의 블록 그룹이 함께 묶인 파일 시스템을 만들어 왔습니다. mkfs 옵션을 사용하여 파일 시스템을 만들 때 이를 변경하지 않았다고 가정하면 -G
파일 시스템은 2GiB 플렉스 그룹으로 분할될 가능성이 높습니다.
모든 파일이 2GiB보다 훨씬 작지 않은 한, 저장할 다음 파일이 두 개 이상의 (플렉스) 블록 그룹에 걸쳐 조각화되어야 하는 상황이 불가피하게 발생합니다. 물론 이는 파일 중 하나가 (플렉스) 블록 그룹에서 사용 가능한 데이터 블록보다 큰 경우 발생합니다.
따라서 목표를 달성하려면 파일 -G
시스템이 매우 큰 플렉스 블록 그룹을 사용하도록 하려면 기본 16보다 훨씬 높은 옵션 설정으로 파일 시스템을 다시 포맷해야 할 것입니다.
답변3
DOS 6 이전에는 FAT 파티션 조각 모음에 대한 일반적인 조언은 다음과 같았습니다.
- 파티션의 파일을 다른 것으로 복사하십시오.
- 파티션을 닦으십시오.
- 빈 파티션에 디렉터리 구조를 다시 만듭니다. 그리고
- 파일을 다시 복사하세요.
조각 모음이 나에게 문제가 되기 전에 MS-DOS 6(포함된 조각 모음 유틸리티 포함)이 나왔기 때문에 나는 이것을 시도하지 않았습니다.