На этот вопрос уже есть ответ здесь:
Большинство людей подумают, используя dd
] или sfill
, чтобы обычно стирать свободное пространство нулями ... однако ограничение для дисков FAT32 состоит в том, что максимальный размер файла может составлять только 4 ГБ.
Как я могу создать несколько файлов меньшего размера, чтобы стереть свободное место на диске FAT32, чтобы преодолеть этот предел?
Эти инструкции устарели, если Вы хотите надежно обнулить данные по своему диску FAT32, используйте сценарий. (если Вы можете, не стесняться редактировать и обновлять эти инструкции),
Всегда удостоверяйтесь, что Вы обновляетесь и устанавливаете безопасное - удаляют инструмент
sudo apt-get update
sudo apt-get install secure-delete
Смонтируйте диск FAT32
fdisk -l
sudo mount -t vfat /dev/sdb1 /PATH/TO/MOUNTED/DRIVE
(где sdb1
Ваш sdxx
имя тома)
sudo mount -t drvfs F: /PATH/TO/MOUNTED/DRIVE
(где F
была бы Ваша буква диска),
Также может быть ошибка, где монтирование не работает при попытке смонтироваться к существующему имени папки в /mnt
, в этом случае, если бы Вы пытались смонтироваться, то необходимо размонтироваться sudo umount /mnt/f
, перезапустите WSL, удалите папку (sudo rmdir /mnt/f
), воссоздайте папку (sudo mkdir /mnt/f
), и наконец смонтируйтесь снова
(где f
была бы Ваша буква диска как нижний регистр),
Создайте временную папку в корне диска и переместитесь в него
mkdir /PATH/TO/MOUNTED/DRIVE/tmp
cd /PATH/TO/MOUNTED/DRIVE/tmp
Найдите, что свободное пространство затем создает фиктивные файлы
df -h /PATH/TO/MOUNTED/DRIVE
for i in $(seq START ( END-1 )); \
do fallocate -l 1G emptyfile${i} && echo Created ${i} out of ( END-1 ); \
done
где START
1 ГБ и END
свободное пространство, показанное df -h
->, сколько гигабайтов для записи, например.
for i in $(seq 1 ( 10-1 )); do \
fallocate -l 1G ${i} && echo Created ${i} out of ( 10-1 ); \
done
Это сделало бы девять 1 ГБ "emptyfile" s.
Найдите, что последний бит свободного пространства пишет в
df /PATH/TO/MOUNTED/DRIVE
fallocate -l ( REST-1 ) emptyfileEND
(где REST является свободным пространством, показанным в df -hB
)
Вернитесь к корню диска и теперь удалите tmp папку с srm
(безопасное - удаляет инструмент),
cd /PATH/TO/MOUNTED/DRIVE
srm -llrvz /PATH/TO/MOUNTED/DRIVE/tmp
Я создал сценарий, и он работает, не используя fallocate в пользу усеченного, и должен теперь работать хорошо. Вместо того, чтобы выделить 1 ГБ, я вместо этого заставил сценарий выделить байт, застенчивый из 4 гибибайт, таким образом, я заполню диск лучше. (последнее усеченное сделает файл меньше чем 4 гибибайтами),
Это действительно походит на проблему XY.
sfill
, или shred
который в более общем плане доступен (часть coreutils) перезаписывают содержание существующих файлов (если все подходит, например, перезаписи файловой системы на месте, и посмотрите другие глюки, упомянутые в их руководствах).
Если бы Вы хотели это, то Вы могли бы сделать так с shred -n 1 --random-source /dev/zero
; или крошечный сценарий оболочки, который получает размер файла и затем делает a dd conv=notrunc if=/dev/zero of=the_file_to_be_zeroed_out bs=... count=...
.
Но насколько я понимаю, это не то, в чем Вы нуждаетесь. (Если не может удостовериться, что Вы только когда-либо удаляете файл после обнуления его, который звучит действительно громоздким и едва выполнимым.), В чем Вы нуждаетесь, должен обнулить пространство, это в настоящее время не использовано любым файлом, так, чтобы вместо остатков ранее удаленных файлов (который должен был бы все еще быть сжат) неиспользованная область была максимально сжимаема, то есть, предпочтительно полна нулей.
Необходимо создать новый файл, который это как можно больше и полно нулей. Пойдите с чем-то как dd if=/dev/zero of=tmpfile bs=1M
, ожидайте, пока это не выходит с сообщением об ошибке "Ни из какого пространства, оставленного на устройстве", и затем удалите этот файл. Ваше изображение готово быть сжатым – но не забывает umount
это сначала!