Как уничтожить только первую и последнюю часть устройства?

shred командование (из coreutils 8.23) перезаписывает устройство с настраиваемыми данными от начала до конца, что идеально подходит для тех случаев использования, для которых оно предназначено (все они связаны с записью чего-либо на полное устройство).

В моем случае достаточно было бы сделать с x первыми байтами и y последними байтами устройства, что shred относится ко всему устройству, но я, похоже, не нахожу хорошего решения, избегая указания явного значения (размера устройства и т. д.). Я мог бы написать из случайного источника в вычисляемую часть устройства с dd, но тогда я должен получить размер устройства, бороться с MiB и MB и т. д. Может быть, есть что-то столь же удобное, как shred (или я просто что-то упускаю).

В основном информация, связанная с разделением (gpt, таблица разделов msdos и резервные копии), размещается в начале и конце устройства.

1 ответ

Решение

Вы уверены, что действительно не хотите? wipefs удалить подпись файловой системы с устройства?


dd не так сложно в использовании, особенно получение правильных номеров от gparted или же fdisk, увидеть ниже.

Метод целого диска работает, как в dd if=/dev/zero of=/dev/sdx, Возможно с bs=1M увеличить скорость. Или заменить /dev/zero с /dev/urandom` для более случайных данных. Как в " Безопасном стирании диска ArchWiki ".

Только для одного номера раздела "n", он же "sdxn", можно сделать dd if=/dev/zero of=/dev/sdxn

Только для "первых" n МБ вы можете сделать dd if=/dev/zero of=/dev/sdx bs=1M count=n

Для "начала" и "конца" вы можете узнать размер сектора диска и общее количество секторов - gparted говорит вам это легко, в "View -> Device Info", и даже сообщает вам, где находятся начальный и конечный секторы раздела. parted & fdisk (для MBR) тоже должно.

Затем с помощью математики выясните, где можно стереть.

  • Крошечный (512b) точный способ - найти, какие сектора стереть. Если ваш диск имеет 512 байт секторов и имеет 251658240 секторов (это 120 ГБ,= 251658240 секторов * 512 байт / 1024, преобразуйте в k / 1024 в M / 1024 в G)...

    • чтобы стереть последний 1G (гигабайт, G=1024*1024*1024 байта), вы можете вычислить сектора в 1 ГБ (1GB / 512b = 1 * 1024 * 1024 * 1024/512 = 2097152), а затем вычесть это из общего числа секторов 251658240 - 2097152 = 249561088 и начать с этого сектора для этого множества секторов:
      dd if=/dev/zero of=/dev/sdx bs=512 seek=249561088 count=2097152

  • Вы могли бы преобразовать bs, seek & count вместо этого использовать M (M=1024*1024), если он слишком медленный - 512b за раз. Диск всегда начинается с 0, но заканчивается в 251658240 * 512/1024/1024 = 122880 в M.

    • Протрите последний 1G. В G 1024 M, поэтому пропустите 122880 - 1024 = 121856 M и выполните:
      dd if=/dev/zero of=/dev/sdx bs=1M seek=121856 count=1024

  • Гигиеническая грубая оценка, отлично работает, когда запись за "концом" не наносит ущерба (сам конец диска, не стирая средний раздел). Попробуйте 1G (G=1024*1024*1024 байта) одновременно. Увидеть man dd для получения дополнительной информации, он понимает K, M, G, другие.

    • Последний г, dd if=/dev/zero of=/dev/sdx bs=1G seek=119 пропустив count продолжать идти прямо до конца устройства.

Или, для более быстрого способа записи "случайных" данных на весь раздел / диск, вы можете использовать dm-crypt:

Сначала создайте временный зашифрованный контейнер в разделе (sdXY) или на полном диске (sdX), который вы хотите зашифровать, например, используя параметры по умолчанию

# cryptsetup open --type plain /dev/sdXY container

Во-вторых, проверьте это существует

# fdisk -l
Disk /dev/mapper/container: 1000 MB, 1000277504 bytes
...
Disk /dev/mapper/container does not contain a valid partition table

Наконец, протрите его псевдослучайными (зашифрованными данными), использование / dev / urandom не требуется, поскольку шифровальный шифр используется для случайности:

# dd if=/dev/zero of=/dev/mapper/container
dd: writing to ‘/dev/mapper/container’: No space left on device
Другие вопросы по тегам