cloop/create_compressed_fs를 사용하여 파일 시스템 이미지를 생성하는 가장 빠른 방법

cloop/create_compressed_fs를 사용하여 파일 시스템 이미지를 생성하는 가장 빠른 방법

Cloop은 압축된 블록 장치 이미지를 마운트하기 위한 Linux 패키지입니다. create_compressed_fs파일 시스템(또는 모든 유형의 파일이나 블록 장치)의 압축 이미지를 생성하기 위한 보조 도구입니다. 파일 시스템 이미지를 생성하는 가장 빠른 방법은 무엇입니까? 소스가 한 하드 디스크의 파티션이고 대상이 다른 디스크의 파일이라고 가정합니다. 또한 원본 하드 디스크가 처리량 속도의 제한 요소라고 가정합니다.

답변1

이 답변에는 전송을 최적화하는 동안 배운 내용이 기록되어 있습니다 create_compressed_fs.

create_compressed_fsUbuntu 20.04 패키지 저장소에서 사용할 수 있지만 cloop-utilcloop 커널 드라이버에서는 사용할 수 없습니다. 그것을 구축하려면 다음을 사용하십시오.https://git.launchpad.net/ubuntu/+source/cloop, 현재 커널에 적용됩니다. 업스트림 소스는 더 이상 사용되지 않습니다. 우분투 20.10에 Cloop이 추가되었습니다.

create_compressed_fs전체 디스크 이미지를 메모리에 저장하는 옵션을 포함하여 많은 옵션이 있으므로 사용하지 마십시오. 또한 create_compressed_fs10초마다 몇 초 동안 읽기를 중지하는 경향이 있으므로 내부 동기화 또는 문제가 발생할 수 있습니다. 읽지 않을 때 소스 디스크는 몇 초 동안 유휴 상태로 유지됩니다.

소스가 파티션인 경우 압축을 개선하기 위해 사용되지 않는 데이터를 비워두는 것이 좋습니다. fstrim(장치가 TRIM을 지원하는 경우) 또는 zerofree(장치가 TRIM을 지원하지 않지만 ext2/3/4 파일 시스템이 있는 경우)를 사용하십시오 .

먼저 원본 파티션의 크기를 찾습니다.

sudo blockdev --getsize64 /dev/my-partition

소스가 일반 파일인 경우 command ls -l my-imagefile크기는 소유자 및 그룹 다음의 숫자입니다.

소스 드라이브가 최대 읽기 속도를 유지하도록 하려면 create_compressed_fs. 이 pv도구는 바로 이러한 작업을 수행할 수 있으며 처리량과 버퍼 수준도 실시간으로 표시합니다. 자체 출력도 생성 하므로 출력이 복잡해지지 않도록 create_compressed_fs다른 터미널에서 pv및 를 실행하려고 합니다. create_compressed_fs두 프로세스가 서로 통신할 수 있도록 FIFO를 만듭니다.

mkfifo fifo

터미널에서 다음을 실행하세요.

create_compressed_fs -B <blocksize> -s <input_size> fifo <output_filename>.cloop

나는 블록 크기를 사용하고 싶지만 16K그것은 당신에게 달려 있습니다.

다른 터미널에서도 실행

sudo mbuffer -i <path_to_source_device_or_file> -m 1G >fifo

mbuffercreate_compressed_fs이제 일시 중지 중에 소스 드라이브를 계속 사용하기 위해 1GB 버퍼가 사용됩니다. 버퍼는 일시 중지 시 완전히 채워지지 않도록 크기를 조정해야 하지만 버퍼에 충분한 메모리가 있는지 확인하세요. 버퍼가 항상 가득 차서 create_compressed_fs지울 수 없다면 소스 장치에 병목 현상이 발생하지 않는 것입니다.

버퍼링에도 사용해 보았지만 pv잘 작동하지 않았습니다. 소스 블록 장치에서 직접 읽는 경우 소스 드라이브가 최고 속도로 데이터를 생성하도록 허용하지 않으며 create_compressed_fs계속 읽어야 하더라도 일시 중지된 동안 차단을 관리합니다 . 이것은 버그인 것 같습니다.

이미지가 완성되면 fifo를 삭제하는 것을 잊지 마세요.

rm fifo

관련 정보