지퍼 공간이 부족하면 지퍼의 일부가 저장되나요?

지퍼 공간이 부족하면 지퍼의 일부가 저장되나요?

각 하위 디렉터리를 zip 파일로 압축하기 위해 다음 명령을 실행했습니다.

nohup sh -c 'for i in */; do zip -r "${i%/}.zip" "$i"; done' &

그러고 보니 공간이 부족해서 zip 파일 중 부분적으로만 완료된 것이 있는지, 아니면 완료할 수 없는 경우 zip이 실패하게 되는지 확인하려고 노력 중입니다. 내 nohup.out은 전체 압축을 완료할 수 없는 경우 부분 압축을 수행하지 않음을 나타내는 것 같습니다. 아는 사람 있나요?

답변1

부분 zip 파일을 생성하지 않습니다. 방금 다음 테스트를 수행했습니다.

dd if=/dev/zero of=test.dat bs=1M count=10 # create a 10MB file 
mkfs.ext4 test.dat #create ext4 filesystem in the file 
mount test.dat /mnt # mount the file to /mnt 
cd /mnt # go to the new device, which is only less than 10MB 
dd if=/dev/urandom of=test.dat bs=1M count=8 
zip test.zip test.dat  

/mnt에 공간이 부족하고 zip 파일이 생성되지 않았기 때문에 zip 명령이 실패했습니다. 프로세스를 살펴보면 strace작동하면서 임의의 파일 이름을 가진 임시 파일이 생성되는 것을 볼 수 있습니다.

openat(AT_FDCWD, "test.zip", O_RDONLY)  = -1 ENOENT (No such file or directory)
stat("test.dat", {st_mode=S_IFREG|0644, st_size=8388608, ...}) = 0
stat("test.zip", 0x5586eb6642e0)        = -1 ENOENT (No such file or directory)
stat("test.dat", {st_mode=S_IFREG|0644, st_size=8388608, ...}) = 0
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "test.zip", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
close(3)                                = 0
stat("test.zip", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
unlink("test.zip")                      = 0
getpid()                                = 16464
openat(AT_FDCWD, "zirEX4VT", O_RDWR|O_CREAT|O_EXCL, 0600) = 3

위의 추적에서 볼 수 있듯이 zirEX4VT추적이 끝나면 and라는 파일이 생성됩니다.

write(1, "\nzip I/O error: No space left on"..., 39
zip I/O error: No space left on device) = 39
close(3)                                = 0
unlink("zirEX4VT") 

파일이 zirEX4VT삭제됩니다.

관련 정보