Вопрос: Как стереть свободное место на диске в Linux?


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

Что я должен использовать для достижения этого?


130
2017-08-06 23:48


Источник


Единственным безопасным решением может быть сохранение ваших файлов в другом месте, уничтожение всего раздела, восстановление файловой системы и восстановление файлов. Я бежал PhotoRec и был шокирован тем, сколько материала можно было получить даже после «протирания» свободного места. Компромиссное решение состоит в том, чтобы переместить левую границу вашего раздела на 6% от его размера после того, как вытекла видимое свободное пространство. - user39559


Ответы:


Предупреждение: Современное оборудование для дисков / SSD и современные файловые системы могут выгружать данные в местах, где вы не можете их удалить, поэтому этот процесс может по-прежнему оставлять данные на диске. Единственными безопасными способами очистки данных являются команда ATA Secure Erase (если она выполнена правильно) или физическое уничтожение. Также см Как я могу надежно стереть всю информацию на жестком диске?


98
2017-08-07 01:55



Трудно найти текущую «официальную» домашнюю страницу безопасного удаления. Вероятно, более старая версия утверждает, что нет отчетов об ошибках, но в то же время нет открытой системы bugtracking, где я могу сообщить об ошибке, которую я нашел. На домашней странице безопасного удаления также указывается, что она может не протрите все неиспользуемые блоки данных, в зависимости от используемой файловой системы, что верно. - user39559
С современными жесткими дисками (размером более 20 ГБ) совершенно бесполезно делать несколько проходов и ждать целую вечность. Поэтому установка специализированных инструментов также стала бесполезной (что может объяснить, почему у secure-delete больше нет домашней страницы). Просто сделайте это из соответствующего раздела: cat /dev/zero >nosuchfile; rm nosuchfile, - mivk
@mivk: Почему бесполезно делать больше одного прохода? И зачем использовать / dev / zero вместо / dev / random? Это связано с проблемами скорости? - naught101
Использование / dev / zero выполняется намного быстрее. Если вы записываете свободное пространство из / dev / random, ядро ​​должно генерировать все эти случайные данные «на лету». Это интересный способ наблюдать, как ваш средний прыжок до максимума ... - dafydd
Ответ на вопрос о том, нужны ли несколько салфеток, здесь: Почему писать нули (или случайные данные) по жесткому диску несколько раз лучше, чем просто делать это один раз? - sleske


Самый быстрый способ, если вам нужен только один проход, и просто хотите заменить все нулями:

cat /dev/zero > zero.file
sync
rm zero.file

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

Во время этой операции будет время, когда на файловой системе вообще не будет свободного места, которое может быть десятки секунд, если результирующий файл большой и фрагментирован, поэтому требуется некоторое время для удаления. Чтобы уменьшить время, когда freespace полностью равна нулю:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
cat /dev/zero > zero.file
sync
rm zero.small.file
rm zero.file

Этого должно быть достаточно, чтобы кто-то не прочитал старое содержимое файла без дорогостоящей судебной операции. Для немного более безопасного, но медленного варианта замените /dev/zero с /dev/urandom, Для большей паранойи выполните несколько шагов с /dev/urandom, хотя, если вам нужно столько усилий, shred утилита из пакета coreutils - это путь:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
shred -z zero.small.file
cat /dev/zero > zero.file
sync
rm zero.small.file
shred -z zero.file
sync
rm zero.file

Обратите внимание, что в приведенном выше примере мелкий файл измельчается до создания большего размера, поэтому его можно удалить, как только будет установлено больше, вместо того, чтобы ждать его измельчения, оставляя файловую систему нулевым свободным пространством за время, которое требуется. Процесс измельчения с длинный время по большому файлу и, если вы не пытаетесь скрыть что-то из NSA, на самом деле не обязательно IMO.

Все вышеперечисленное должно работать с любой файловой системой.

Пределы размера файла:

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

Для FAT32 это определенно вызывают беспокойство из-за ограничения файла 2GiB: большинство объемов больше, чем это в наши дни (8TiB - это ограничение размера тома IIRC). Вы можете обойти это, проложив большой cat /dev/zero выходной выход через split для создания нескольких файлов меньшего размера и соответственно соответствующим образом отрегулировать стадии уничтожения и удаления.

С ext2 / 3/4 это не вызывает беспокойства: при стандартном / общем блоке 4K ограничение размера файла составляет 2TiB, поэтому вам придется иметь огромный том, чтобы это было проблемой (максимальный объем в этих условиях составляет 16 тиБ).

С (все еще экспериментальными) btrfs максимальный размер файла и объема составляет массив 16EiB.

В NTFS максимальная длина файла больше, чем максимальная длина в некоторых случаях.

Отправные точки для получения дополнительной информации:
http://en.wikipedia.org/wiki/Ext3#Size_limits
http://en.wikipedia.org/wiki/Btrfs
http://en.wikipedia.org/wiki/Ntfs#Scalability

Виртуальные устройства

Как уже упоминалось в комментариях, есть дополнительные соображения для виртуальных устройств:

  • Для редко распределенных виртуальных дисков используются другие методы, такие как те, которые используются zerofree будет быстрее (хотя в отличие от cat а также dd это не стандартный инструмент, на который вы можете положиться, будучи доступным практически в любой ОС Unix-типа).

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

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

  • Для вышеупомянутых проблем на виртуальных устройствах: если вы не контролируете хост (ы) и не можете сделать безопасную очистку своего нераспределенного пространства, после чего очистите диски в виртуальной машине или передвиньте виртуальное устройство, вы ничего не сможете с этим сделать после факт. Единственное средство - использовать полное шифрование диска от начала поэтому ничто не зашифрованное не будет записано на физические носители в первую очередь. Тем не менее, по-прежнему может потребоваться очистка свободного пространства внутри виртуальной машины. Также обратите внимание, что FDE может сделать разреженные виртуальные устройства менее полезными, поскольку уровень виртуализации не может действительно увидеть, какие блоки не используются. Если уровень файловой системы OS отправляет команды отделки на виртуальное устройство (как будто это SSD), и виртуальный контроллер интерпретирует их, то это может решить это, но я не знаю никаких обстоятельств, когда это происходит на самом деле, и более широкого обсуждение этого вопроса в другом месте (мы уже приближаемся к тому, чтобы быть вне темы для первоначального вопроса, поэтому, если это вызвало ваш интерес, некоторые эксперименты и / или последующие вопросы могут быть в порядке).


64
2017-08-07 08:58



Простое обнуление, по-видимому, также может быть выполнено с помощью secure-delete инструменты: использование sfill -llz уменьшает всю процедуру до одного прохода, который записывает только 0. - foraidt
Это занимает некоторое время. Действительно ли это самый быстрый способ? Я предполагаю, что запись ГБ данных всегда займет некоторое время ... - endolith
@endolith: если вы хотите очистить свободное пространство от активной файловой системы, тогда вы не сможете обойтись без необходимости записывать столько данных через служебные данные файловой системы. Инструменты безопасного удаления, предлагаемые fnord_ix, могут быть быстрее, потому что они оптимизированы для этого типа задач. - David Spillett
@endolith: из описания на man-странице я ожидал бы, что вариант zerofree будет только быстрее для редко распределенных виртуальных дисков, на самом деле он может быть медленнее на реальных или фиксированных размерах, если он выполняет чтение до записи чтобы подтвердить, что блок не имеет содержимого. Воздушный шар для виртуального диска не должен происходить, поскольку большинство разреженных драйверов дисков принимают все нули как «не выделяют этот блок». Также, cat а также dd доступны практически на любой ОС Unix-типа, поскольку они считаются стандартными инструментами, zerofree вероятно, нет, если он не был явно добавлен. - David Spillett
@endolith: сказав выше, zerofreeконечно, будет работать, конечно, «вся файловая система временно заполнена», упомянутая в man-странице (почти, но не совсем смягченная small.file jiggery pokery в моих примерах) является настоящая забота если вы делаете это в текущей активной системе, и zerofree действительно будет быстрее в конкретном экземпляре, который он оптимизирован для: редко распределенных виртуальных блочных устройств. Хотя вы не можете полагаться на удаление на виртуальном устройстве в целях безопасности: единственный истинный ответ в этом случае - это шифрование с полным устройством с самого начала. - David Spillett


ПРЕДУПРЕЖДЕНИЕ

Я был шокирован тем, сколько файлов PhotoRec может извлекаться с моего диска, даже после очистки.

Существует ли больше безопасности при заполнении «свободного пространства» только 1 раз с 0x00 или 38 раз с различными каббалистическими стандартами, это скорее академическая дискуссия. Автор оригинальной статьи 1996 года по измельчению написал себе эпилог говоря, что это устаревшее и ненужное для современного оборудования. Нет документально зафиксированного случая, когда данные физически заменяются нулями и восстанавливаются впоследствии.

Верно хрупкая ссылка в этой процедуре файловая система, Некоторые файловые системы резервируют место для специального использования и не становятся доступными как «свободное пространство». Но ваши данные могут быть там, Это включает в себя фотографии, личные текстовые электронные письма, что угодно. У меня есть только googled reserved + space + ext4 и узнал, что 5% моих home раздел зарезервирован. Думаю, это где photorec нашел так много моих вещей. Вывод: метод измельчения не является самым важным, даже многопроходный метод все еще оставляет данные на месте,

Можешь попробовать # tune2fs -m 0 /dev/sdn0 перед установкой. (Если это будет корневой раздел после перезагрузки, убедитесь, что запустите -m 5 или -m 1 после размонтирования).

Но тем не менее, так или иначе, может остаться какое-то место.

Единственный по-настоящему безопасный способ - стереть весь раздел, снова создать файловую систему, а затем восстановить файлы из резервной копии.


Быстрый способ (рекомендуется)

Запустите из каталога в файловой системе, которую вы хотите стереть:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
rm zero.file

Примечания: цель небольшого файла - уменьшить время, когда свободное пространство полностью равно нулю; цель синхронизации - убедиться, что данные фактически записаны.

Это должно быть достаточно хорошим для большинства людей.

Медленный путь (параноидальный)

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

Тем не менее, если у вас есть основания полагать, что секретные агентства потратят много ресурсов для восстановления ваших файлов, этого должно быть достаточно:

dd if=/dev/urandom of=random.small.file bs=1024 count=102400
dd if=/dev/urandom of=random.file bs=1024
sync ; sleep 60 ; sync
rm random.small.file
rm random.file

Это занимает гораздо больше времени.

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

Очень медленный путь (сумасшедший параноид)

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

Но если у вас есть много свободного времени, и вы не против тратить свой диск с большим количеством перезаписи, вот он:

dd if=/dev/zero of=zero.small.file bs=1024 count=102400
sync ; sleep 60 ; sync
shred -z zero.small.file
dd if=/dev/zero of=zero.file bs=1024
sync ; sleep 60 ; sync
rm zero.small.file
shred -z zero.file
sync ; sleep 60 ; sync
rm zero.file

Примечание. Это по существу эквивалентно использованию инструмента безопасного удаления.


Перед редактированием этот пост был переписан Дэвидом Спиллеттом. Команда «cat» выдает сообщение об ошибке, но я не могу писать комментарии к сообщениям других людей.


39
2018-06-09 17:40



Вы можете комментировать сообщения других людей с помощью 50 репутации, - Gnoupi
cat ожидается, что в моих примерах команда завершит ошибку «без пробелов». Вы можете скрыть это путем перенаправления stderr на /dev/null если это проблема. Обычно я использую pv скорее, чем cat или dd для такого рода вещей, чтобы получить полезную индикацию прогресса. - David Spillett
...raises the suspicion that it is actually encrypted data. You may die under torture for not revealing the decryption key. Хех, это именно то, о чем я думал. Я думаю, это означает, что я параноик ... - Navin
/: write failed, filesystem is full на FreeBSD - Alex G
Корень всегда может использовать зарезервированное пространство. Поэтому, если вы выполняете нулевое заполнение с правами root, вы также сможете заполнить 5% зарезервированное пространство; tunefs не требуется. По-прежнему возможно, что в других частях файловой системы могут быть данные. - Nate Eldredge


В Ubuntu есть утилита zerofree:

http://manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html

   zerofree — zero free blocks from ext2/3 file-systems

   zerofree  finds  the  unallocated, non-zeroed blocks in an ext2 or ext3
   filesystem (e.g. /dev/hda1) and fills them with zeroes. This is  useful
   if  the  device  on  which this file-system resides is a disk image. In
   this case, depending on the type of disk image, a secondary utility may
   be  able  to  reduce the size of the disk image after zerofree has been
   run.

   The usual way to achieve  the  same  result  (zeroing  the  unallocated
   blocks)  is to run dd (1) to create a file full of zeroes that takes up
   the entire free space on the drive, and then delete this file. This has
   many disadvantages, which zerofree alleviates:

      ·  it is slow;

      ·  it makes the disk image (temporarily) grow to its maximal extent;

      ·  it  (temporarily)  uses  all  free  space  on  the disk, so other
         concurrent write actions may fail.

   filesystem has to be unmounted or mounted  read-only  for  zerofree  to
   work.  It  will exit with an error message if the filesystem is mounted
   writable. To remount the  root  file-system  readonly,  you  can  first
   switch to single user runlevel (telinit 1) then use mount -o remount,ro
   filesystem.

Также проверьте эту ссылку о zerofree: Сохранение разрешений файловой системы - это от его автора - Рона Йорстона (9 августа 2012 года)


24
2018-01-05 14:51



Важно, чтобы файловая система была отключена или смонтирована только для чтения для работы zerofree. - AntonioK
Было бы неплохо включить некоторую информацию о том, как это сделать в корневой файловой системе. Я чувствую, что это не сработает, потому что вам нужно будет размонтировать файловую систему, одновременно используя инструмент из указанной файловой системы. - Ant6n


Вот как это сделать с помощью графического интерфейса.

  1. устанавливать BleachBit
  2. Запустите с правами администратора, нажав «Приложения» - «Системные инструменты» - «BleachBit» в качестве администратора.
  3. В настройках укажите, какие пути вы хотите. Как правило, они догадываются о них хорошо. Вы хотите включить один путь для записи для каждого раздела. Обычно это / home / username и / tmp, если они не являются одним и тем же разделом, и в этом случае просто выберите один.
  4. Установите флажок System - Wipe Free Disk Space.
  5. Нажмите «Удалить».

Продвижение BleachBit над dd (что в противном случае очень приятно) - это когда диск наконец заполнен, BleachBit создает небольшие файлы для очистки inodes (который содержит метаданные, такие как имена файлов и т. Д.).


3
2017-11-06 12:40



Осмотреть Bleachbit's open source python code для очистки свободного пространства от диска для себя. - shadowbq


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

Чтобы выделить файлы с помощью dd try:

dd if=/dev/zero of=delete_me bs=1024 count=102400

Это создаст файл с именем delete_me что составляет 100 МБ. (Вот bs «размер блока» установлен в 1k, а count - количество блоков для размещения.)

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

Но ЗАМЕЧАНИЕ: буферизации, даже если вы выполняете все диск, вы можете не получить абсолютно все!


Эта ссылка рекомендует scrub для протирки свободного пространства. Не пробовал.


2
2017-08-07 01:04



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


Протрите диск с максимальной скоростью.

Типичные инструкции по шифрованию диска в настоящее время расскажут вам о первом WIPE диске.

Команда ниже заполнит ваш диск зашифрованным текстом AES.

Используйте live CD, если вам нужно стереть основной загрузочный диск.

Откройте терминал и поднимите свои привилегии:

sudo bash

Перечислим все диски в системе:

cat /proc/partitions

ПРИМЕЧАНИЕ. Замените /dev/sd{x} с устройством, которое вы хотите стереть.

ПРЕДУПРЕЖДЕНИЕ: Это не для любителей! Вы можете сделать вашу систему не загружаемой !!!

sudo openssl enc -aes-256-ctr -pass pass:"$(dd if=/dev/urandom bs=128 count=1 2>/dev/null | base64)" -nosalt < /dev/zero > /dev/sd{x}

Я ошеломлен тем, насколько это быстро.


2
2017-09-08 19:27





Вероятно, у вас уже есть Комплект GNU Coreutils установленных в вашей системе. Он предоставляет команду шинковать,


2
2017-08-07 01:58



Shred не будет очищать неиспользуемое дисковое пространство, не вставляя его сначала в файлы ... - dmckee


используйте dd и просто обнулите свободное пространство. это данные мифа должны быть написаны многократно (просто спросите peter guntmann) и случайных данных, в отличие от 1, то 0 означает неестественную активность. то конечный результат - чистый диск с меньшим количеством времени, потраченного на запись. кроме того, безопасные программы удаления canant guarentee даже перезаписывают реальный файл на современных файловых системах (журнал). сделайте себе одолжение и получите фоторек, сканируйте свой диск, чтобы увидеть беспорядок, протрите его 1 и, возможно, нулями, чтобы он выглядел нетронутым. если photorec все еще находит материал, помните, что он просматривает все доступное, так что сделайте это осторожно снова с пользователем root.

помните, что cia / fbi / nsa не имеет причудливой машины, которая может считывать фактическое состояние ваших бит магнитных носителей. это была всего лишь статья, написанная давно. «что-если». вам нужно только вытереть 1 раз.


1
2018-05-25 20:40



Есть несколько интересных вещей, о которых вы говорили, но есть ли у вас какие-либо источники для поддержки этой информации? Трудно поверить, что вся эта перезапись бесполезна. Также, пожалуйста, улучшите свой пост, его трудно читать с пунктуацией. - gronostaj
@gronostaj: «Это данные о мифе, которые должны быть написаны несколько раз» современные диски по крайней мере, было доказано несколькими исследованиями. Все эти 30+ пропусков, рекомендованных Гутманном, больше не требуются, как признал сам автор. - Karan


Вы можете стереть свободное пространство, используя безопасный пакет удаления.

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

Чтобы установить безопасный пакет удаления в Linux (Ubuntu), установите его с помощью следующей команды:

$ sudo apt-get install secure-delete

Затем стирать в ваших данных нет свободного места, попробуйте выполнить следующую команду:

sfill -f -v -ll /YOUR_MOUNTPOINT/OR_DIRECTORY

Где / YOUR_MOUNTPOINT / OR_DIRECTORY - ваша точка монтирования (df -h, mount) или каталог, чтобы стереть свободное пространство.

Прочтите мануалы:

http://manpages.ubuntu.com/manpages/hardy/man1/sfill.1.html


1
2017-07-04 21:22