Как за один проход записать нули в свободное место на диске FAT32? [дубликат]

На этот вопрос уже есть ответ здесь:

Большинство людей подумают, используя dd ] или sfill , чтобы обычно стирать свободное пространство нулями ... однако ограничение для дисков FAT32 состоит в том, что максимальный размер файла может составлять только 4 ГБ.

Как я могу создать несколько файлов меньшего размера, чтобы стереть свободное место на диске FAT32, чтобы преодолеть этот предел?

-2
задан 30 March 2019 в 04:03

2 ответа

Эти инструкции устарели, если Вы хотите надежно обнулить данные по своему диску FAT32, используйте сценарий. (если Вы можете, не стесняться редактировать и обновлять эти инструкции),

  1. Всегда удостоверяйтесь, что Вы обновляетесь и устанавливаете безопасное - удаляют инструмент

    sudo apt-get update
    sudo apt-get install secure-delete
    
  2. Смонтируйте диск FAT32

    На Linux

    fdisk -l
    sudo mount -t vfat /dev/sdb1 /PATH/TO/MOUNTED/DRIVE
    

    (где sdb1 Ваш sdxx имя тома)

    С WSL

    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 была бы Ваша буква диска как нижний регистр),

  3. Создайте временную папку в корне диска и переместитесь в него

    mkdir /PATH/TO/MOUNTED/DRIVE/tmp
    cd /PATH/TO/MOUNTED/DRIVE/tmp
    
  4. Найдите, что свободное пространство затем создает фиктивные файлы

    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.

  5. Найдите, что последний бит свободного пространства пишет в

    df  /PATH/TO/MOUNTED/DRIVE
    fallocate -l ( REST-1 ) emptyfileEND
    

    (где REST является свободным пространством, показанным в df -hB)

  6. Вернитесь к корню диска и теперь удалите tmp папку с srm (безопасное - удаляет инструмент),

    cd /PATH/TO/MOUNTED/DRIVE
    srm -llrvz /PATH/TO/MOUNTED/DRIVE/tmp
    

Я создал сценарий, и он работает, не используя fallocate в пользу усеченного, и должен теперь работать хорошо. Вместо того, чтобы выделить 1 ГБ, я вместо этого заставил сценарий выделить байт, застенчивый из 4 гибибайт, таким образом, я заполню диск лучше. (последнее усеченное сделает файл меньше чем 4 гибибайтами),

Сценарий Bash (совместимый с WSL) (загрузка)

2
ответ дан 25 October 2019 в 07:38

Это действительно походит на проблему 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 это сначала!

2
ответ дан 25 October 2019 в 07:38

Другие вопросы по тегам:

Похожие вопросы: