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

583
Karl Richter

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

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

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

1
Я должен был прочитать это три раза, чтобы понять вашу проблему. Правильно ли я считаю, что ваш вопрос в основном: ** Как уничтожить только первую и последнюю часть устройства? **. Хотя мне интересно, почему вы захотите уничтожить именно эту часть? Nifle 9 лет назад 0
@Nifle Проходя через старые вопросы. Вы абсолютно правы, понятия не имею, почему я выбрал этот заголовок и настоял на нем после вашего комментария. Karl Richter 6 лет назад 0

1 ответ на вопрос

3
Xen2050

Вы уверены, что вы действительно хотите не « 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это легко сказать в разделе «Вид -> Информация об устройстве» и даже подскажет, где находятся начальный и конечный сектора раздела. 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, другие.

    • Последний 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 

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