120GB의 하드 드라이브 메모리와 소량의 RAM이 있는 시스템에서 GPG 암호화하려는 100GB 파일이 있다고 가정해 보겠습니다.
외부 저장소를 사용하지 않고 파일을 해독하는 방법(예:gpg로 파일을 암호화하고 암호화되지 않은 버전을 병렬로 점진적으로 삭제하시겠습니까?
답변1
참고: 파일의 일부가 삭제되어 프로세스가 중간에 중단되면 어떻게 됩니까?
디스크 공간은 저렴하기 때문에 이런 식으로 저장하려고 해도 거의 의미가 없습니다.
꼭 이 작업을 수행해야 한다면 파일을 덩어리로 처리하라는 조언이 있습니다. 블록을 가져와 암호화하고 원본 파일의 해당 부분을 삭제합니다. 그런 다음 다음 블록 등을 처리합니다. 이렇게 하면 프로세스가 중단된 경우 완료되지 않은 암호화 블록을 삭제하고 프로세스를 재개할 수 있습니다. 이렇게 하면 파일을 처음부터 끝까지 처리하는 것이 더 쉬워집니다.
경고: 테스트되지 않은 코드입니다. GNU 또는 BusyBox 유틸리티(예: Linux)와 64비트 셸(2GB 이상의 파일 크기 처리)을 사용한다고 가정합니다.
#!/bin/sh
set -e
input_size=$(stat -c %s myfile)
fragment_size=$((1024*1024*1024))
while [ "$input_size" -gt 0 ]; do
chunk_size=$((input_size % fragment_size)) || chunk_size=$fragment_size
input_size=$((input_size - fragment_size))
fragment_name=$(printf fragment-%08d "$((input_size / fragment_size))")
tail -c "$((input_size+1))" myfile | gpg -e >"$fragment_name.gpg.tmp"
mv "$fragment_name.gpg.tmp" "$fragment_name.gpg"
truncate -s "$input_size" myfile
done