TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 34 READS

윈도우 조각모음이 그리워 만든 리눅스 디스크 디프래거의 진짜 쓸모

윈도우 조각모음이 그리워 만든 리눅스 디스크 디프래거의 진짜 쓸모
SOURCE IMAGE · HACKER NEWS

윈도우를 오래 써 본 사람이라면 디스크 조각 모음이 돌아가는 동안 화면을 가득 채운 블록 맵이 재배치되던 장면을 기억할 것이다. 개발자 gbin은 20여 년 전 리눅스로 넘어온 뒤 가장 그리웠던 유틸리티가 바로 이 그래픽 조각모음기였다고 말한다. 현대 리눅스 파일시스템이 매주 조각모음을 필요로 하기 때문이 아니라, 그 블록 맵이 기계 내부에서 벌어지는 일을 눈으로 읽을 수 있게 해 주던 '우연한 인터페이스'였기 때문이다. 그가 공개한 Defragger는 그 향수에서 출발했지만, 단순한 재현물에 머물지 않고 실제로 동작하는 파일시스템 도구로 완성됐다.

향수에서 실무 도구로

프로젝트가 장난감에서 실용 도구로 방향을 튼 계기는 고처리량 로거를 테스트하면서 재현 가능한 스토리지 레이아웃이 필요해진 상황이었다. NVMe에서조차 파일 조각화와 익스텐트 할당 방식이 측정 가능한 성능 편차를 만들어 냈고, 이 변수를 통제하려면 파일시스템의 배치 상태를 직접 들여다보고 정리할 수단이 있어야 했다. Defragger는 파일과 여유 공간, 그리고 파일시스템 메타데이터가 어떻게 할당돼 있는지 시각적으로 보여 주고, 조각난 파일을 찾아내며, 지원되는 파일시스템을 직접 재배치한다.

여기서 눈여겨볼 지점은 이 도구가 e4defrag나 filefrag 같은 기존 명령줄 도구를 감싸는 래퍼가 아니라는 점이다. ext4의 경우 FS_IOC_GETFSMAP 인터페이스로 파일시스템 전체 할당 맵을 얻고, FS_IOC_FIEMAP으로 개별 파일의 익스텐트를 매핑한 뒤, 커널의 EXT4_IOC_MOVE_EXT를 통해 익스텐트를 옮긴다. 즉 커널이 제공하는 저수준 ioctl을 직접 호출하는 구조라, 외부 프로세스를 셸로 불러내는 방식보다 동작 과정을 더 세밀하게 제어할 수 있다.

권한 경계를 분리한 설계

파일시스템을 건드리는 도구에서 가장 민감한 부분은 권한이다. Defragger는 그래픽 애플리케이션과 CLI 자체를 절대 root로 실행하지 않는다. 특권이 필요한 작업만 D-Bus를 통해 좁은 범위의 PolicyKit 인증 헬퍼가 대신 수행하며, 이 헬퍼는 임의의 경로나 명령이 아니라 사전 검증된 불투명(opaque) 작업 ID만 받아들인다. 즉 상위 애플리케이션이 헬퍼에게 '이 파일을 이렇게 옮겨라'라고 자유롭게 지시하는 것이 아니라, 검증을 통과한 정해진 작업만 실행할 수 있도록 공격 표면을 좁혀 둔 것이다. 특권 모드는 systemd와 PolicyKit, 그리고 활성화된 그래픽 PolicyKit 에이전트를 필요로 하지만, 이런 환경이 없을 때는 헬퍼 없이도 실행할 수 있다.

FAT 지원은 성격이 다르다. 클래식 FAT 쓰기는 오프라인 전용으로만 동작하며, 두 벌의 FAT 사본과 파일 체인을 모두 검증하고, 복사한 데이터를 되읽어 확인한 다음에야 디렉터리 메타데이터의 참조를 바꾼다. 미러링된 할당 테이블도 보수적으로 갱신한다. 이는 마운트된 상태에서 함부로 손대지 않겠다는, 데이터 손실을 극도로 경계한 설계다.

아직은 알파, 백업이 전제

다만 개발자 스스로 이 소프트웨어를 명확히 '알파 단계 파일시스템 소프트웨어'로 규정하고 있다는 점을 놓쳐선 안 된다. 가장 많이 검증된 경로는 ext4이며, FAT 쓰기 지원은 비교적 최근에 추가된 것이라 처음에는 버려도 되는 볼륨이나 완전히 백업된 볼륨에서만 써 보라고 권한다. 중요한 데이터는 반드시 백업하라는 경고가 붙어 있다. 실제로 손을 대기 전에 감을 잡고 싶다면 저장소에 포함된 데모를 쓸 수 있는데, 일부러 조각화해 둔 ext4 픽스처를 풀어 임시 루프 장치로 붙인 뒤 그 위에서 동작을 보여 주고, 종료 시 임시 이미지를 분리·삭제한다. 실제 볼륨에는 쓰지 않으므로 안전하게 인터페이스를 체험할 수 있다.

환경 요구 사항은 KDE 생태계에 맞춰져 있다. Qt 6과 KDE Kirigami 기반이며 Plasma 데스크톱을 주 대상으로 삼지만 특정 배포판에 종속되지는 않는다. 빌드에는 Rust 1.85 이상과 CMake 3.24 이상, Qt 6 Base·Declarative, Kirigami, Qt Quick Controls 데스크톱 스타일, PolicyKit, C++ 툴체인이 필요하며 패키지 이름은 배포판마다 다르다. CLI는 장치 경로뿐 아니라 마운트 지점, 장치 심볼릭 링크, 루프 이미지 경로까지 받는다. 라이선스는 MIT와 Apache 2.0 중 선택할 수 있는 이중 라이선스다.

한국 실무자 입장에서 Defragger의 가치는 '조각모음이 다시 필요해졌다'가 아니라, 스토리지 레이아웃이 벤치마크 재현성에 미치는 영향을 눈으로 확인하고 통제할 수 있는 수단이 생겼다는 데 있다. 저지연·고처리량 로깅이나 스토리지 성능 측정처럼 편차 하나가 결과를 흔드는 작업에서, 할당 상태를 시각화하고 특정 파일의 조각화를 정리하는 능력은 실질적인 도구가 될 수 있다. 물론 알파 단계라는 한계를 감안해, 당분간은 프로덕션 볼륨이 아닌 실험용 환경에서 그 유용함과 안정성을 함께 가늠해 보는 것이 현실적인 접근일 것이다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://github.com/gbin/defragger
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기
처리 중...