ファスナースペースが足りない場合、ファスナーの一部が保存されますか?

ファスナースペースが足りない場合、ファスナーの一部が保存されますか?

各サブディレクトリを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削除されます。

関連情報