Обнуление неиспользуемого пространства на жестком диске

Готовясь к созданию сжатых образов нескольких жестких дисков, я ищу программное обеспечение, которое заполнит нулями неиспользуемые части диска (длительные серии нулей сжимаются достаточно хорошо).

Требования:

  • Работает под Linux или Windows 98.
  • Поддерживает форматы дисков NTFS и FAT32.
  • Максимально обнуляет (пустое пространство как нераспределенное, так и внутри выделенного, неиспользуемые записи каталога и т. д.)
  • Свободно

Хорошо бы иметь:

  • Поддержка форматов дисков ext2 и ext3.
Виндовс 98? Это вообще когда-нибудь поддерживало NTFS?
SysInternals SУдали , если можешь позволить себе хотя бы Windows XP.
правда в том, что Win 98 + NTFS может быть оксюмороном... возможно, есть какие-то внешние утилиты для чтения NTFS... но кого волнуют мертвые ОС??
@Thomas, на одном из компьютеров, которые я собираюсь изобразить, установлена ​​Win98, и он слишком медленный для запуска WinXP. Если я собираюсь сделать это с помощью одной программы, то это должна быть либо Win98 (для работы с установленной ОС на этом компьютере), либо Linux (для работы с комбинированной загрузочной дискеты и сетевой файловой системы).

Ответы (5)

Вы можете использовать WipeFreeSpace , который работает на Linux. Поддерживает различные файловые системы, включая FAT32 (Win98). Вы должны пройти через процесс ручной сборки, так как нет бинарного...

Или вы можете использовать инструмент hacers THC-SecureDelete .

Для первой попытки я рекомендую вам сначала сделать резервную копию всех данных, поэтому, если вы сделаете это только один раз, заархивируйте данные на другой диск, очистите весь диск и заархивируйте его обратно.

Обновлено: SysInternals SDelete по крайней мере для Windows XP, как упоминал Томас в верхнем комментарии, является только бесплатным решением для Windows.

Я бы предложил загрузиться с USB-ключа Linux, который дает доступ для чтения / записи к диску, который вы хотите обнулить, и использовать скрипт python (большинство установок Linux включают python), чтобы сделать что-то вроде:

import os

def DoIt(drive_path):
    """ Fill a drive with zeros then delete them """    
    info = os.statvfs(drive_path)  # Get a the file system info. NOT AVAILABLE ON WINDOWS!
    zerodir = os.path.join(drive_path, 'ZerosDir')  # Create a directory name
    os.makedirs(zerodir)  # And the directory
    filename_pattern = os.path.join(zerodir, 'Z%07d.000')  # File name pattern
    bsize = max(info.f_bsize, info.f_frsize)  # Decide the block size
    zeros = "\x00" * bsize  # Create a block of zeros that size

    try:  # We don't wish to abort the whole script on an error
        for n in xrange(info.f_files):  # For the max number of files allowed
            with open(filename_pattern % n, 'wb') as zf:  # Open a file
                zf.write(zeros)  # write the file
                zf.flush()  # Make sure it is written
                os.fsync(zf)  # REALLY Sure
    except IOError, e:
        pass # Carry on to the end of the script even if there is a problem
    print 'Finished Creating Files'

    for n in xrange(info.f_files):  # For the max number of files allowed
       try:  # Don't wish to abort even if there is a file we can't delete
           os.os.remove(filename_pattern % n) # Remove the file
       except OSError, e:  # In case of problems
           print e  # Print the problem but carry on
    os.rmdir(zerodir)
    print 'Done!'

if __name__ == "__main__":
    import sys
    if len(sys.argv) < 2:
        print "Please supply the path(s) to the drive(s) to fill with zeros"
    for arg in sys.argv[1:]:
        DoIt(arg)

Важная заметка

Вышеупомянутое на 100% не проверено Используйте на свой страх и риск

Не похоже, что это обнуляет свободное пространство в FAT32 и других кластерных файловых системах, и даже не затрагивает неиспользуемые записи каталога.

Исторически сложилось так, что мое решение сделать так, как вы описали, состояло бы в том, чтобы смонтировать исходную файловую систему и использовать команду dd для создания файла с нулевым заполнением, а затем удалить временный файл:

$ mount /dev/source_hard_drive /mnt
$ cd /mnt
$ dd if=/dev/zero of=some_random_temp_file bs=1M ; rm some_random_temp_file
Это не обнуляет свободное пространство частично используемых секторов.
Поможет ли сначала запустить дефрагментацию с этой проблемой?
Нет. Дефрагментация не упаковывает несколько файлов в один сектор, если файловая система не предназначена для этого, и я не верю, что какая-либо из файловых систем, в которых я заинтересован, ее поддерживает.

Рассмотрите возможность использования Partclone вместо обнуления неиспользуемого пространства на вашем диске. Partclone — это бесплатное программное обеспечение, которое поддерживает форматы дисков NTFS, FAT32, EXT2 и EXT3, а также многие другие форматы.

Вместо обнуления неиспользуемого пространства Partclone можно настроить на копирование только используемых блоков, присутствующих на диске . Он может генерировать так называемый файл домена , в котором указывается, какие блоки на диске фактически используются. Это сэкономит ваше время и позволит создать неразрушающую копию исходных данных.

Максимально обнуляет (пустое пространство как нераспределенное, так и внутри выделенного, неиспользуемые записи каталога и т. д.)

ntfswipeхорошо работал на линуксе. Он может получить все неиспользуемые биты, такие как восстановленная информация и удаленный файл, а не только свободное место.

Поддержка форматов дисков ext2 и ext3.

Для этого вы можете использовать zerofree.

Это три из четырех поддерживаемых форматов. У вас есть предложения по FAT32?
@mark нет, извините, это только те, которые я нашел, пытаясь сделать то же самое