Предотвратите `dd` от разрушения SSD или HDD
У меня есть два SSD и на HDD.
Когда я использую sudo dd if=/dev/zero of=/dev/sdd count=1000
хорошие вещи случаются, и я стираю разделы с моего флэш-накопителя USB.
Когда я использую sudo dd if=/dev/zero of=/dev/sdb count=1000
происходят плохие вещи, и я теряю разделы Windows 7 и Ubuntu 14.04 со своего жесткого диска емкостью 500 ГБ.
Плохие вещи случались однажды. Как я могу предотвратить dd
сделать это снова?
т.е. проверьте что of=
не содержит sda
, sdb
или же sdc
,
1 ответ
Создайте dd
скрипт-обёртка
Откройте терминал, используя Ctrl+Alt+T. Тогда позвони gedit
с:
gksu gedit /usr/local/bin/dd
и скопируйте и вставьте эти команды:
#!/bin/bash
# Who called this script?
PARENT_COMMAND="$(ps -o comm= $PPID)"
if [[ $(id -u) != 0 ]]; then # Only non-root processes enter password (ie "sudo dd ..." is ok)
echo dd must be called with sudo powers
exit 1
fi
# log dd usage for audit trails
# log-file '"$PARENT_COMMAND"" - ""$@"' "/var/log/dd-usage"
# Display hints & arguments. Get any key to proceed or <Ctrl>+C to abort
echo "╔════════════════════════════════════════════════════════════════╗"
echo "║ ║"
echo "║ dd - Data Duplicator ║"
echo "║ ║"
echo "╚════════════════════════════════════════════════════════════════╝"
echo
echo " Parameter 1 hint: if=/dev/zero"
echo " Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c"
echo " Parms >2 hints: bs=512 is default block size"
echo " Parms >2 hints: count=100 will process 100 blocks"
echo
echo " Use /bin/dd --help for more info (don't use dd --help)"
echo
# Display drive letterss, names and sizes without partitions for guide
lsblk -ido KNAME,TYPE,SIZE,MODEL
echo
echo " Current parameters: "”$@”
echo
echo " Press <Enter> to continue or <Ctrl>+C to abort."
read ANYKEY
if [[ "$2" != of=* ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Parameter 2 must start with 'of=' (output file=)"
exit 2
fi
if [[ "$2" =~ "sda" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sda"
exit 2
fi
if [[ "$2" =~ "sdb" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sdb"
exit 2
fi
if [[ "$2" =~ "sdc" ]]; then
echo -e "\a" # PC speaker beep or pleasant bell with PulseAudio hooks
echo "ERROR! Output file (of=) cannot be /dev/sdc"
exit 2
fi
# Call REAL dd command with parameters passed to this wrapper sript
/bin/dd "$@"
exit 0
Сохраните файл и выйдите gedit
,
Наконец отметьте новый dd
как исполняемый файл с:
sudo chmod +x /usr/local/bin/dd
На что это похоже
Ниже показано, как это отображается на экране вашего терминала при вызове нового dd
Скрипт без использования защищенных дисков.
$ sudo dd if=/dev/zero of=/dev/sdd bs=512 count=100
╔════════════════════════════════════════════════════════════════╗
║ ║
║ dd - Data Duplicator ║
║ ║
╚════════════════════════════════════════════════════════════════╝
Parameter 1 hint: if=/dev/zero
Parameter 2 hint: of=/dev/sdY where Y cannot be a, b or c
Parms >2 hints: bs=512 is default block size
Parms >2 hints: count=100 will process 100 blocks
Use /bin/dd --help for more info (don't use dd --help)
KNAME TYPE SIZE MODEL
sda disk 223.6G KINGSTON SHSS37A
sdb disk 465.8G ST9500423AS
sdc disk 119.2G KingFast
sdd disk 29.8G USB Flash Drive
sr0 rom 1024M DVD+-RW GT80N
Current parameters: 'if=/dev/zero of=/dev/sdd bs=512 count=100'
Press <Enter> to continue or <Ctrl>+C to abort.
100+0 records in
100+0 records out
51200 bytes (51 kB, 50 KiB) copied, 0.00339331 s, 15.1 MB/s
Заметки
Поскольку сценарий оболочки находится в /usr/local/bin
он вызывается перед обычной командой, хранящейся в /bin
,
Второй параметр должен начинаться с of=
и не может содержать sda
, sdb
или же sdc
добавьте больше дисков, чтобы защитить или вычесть диски в зависимости от вашей установки.
Символы рисования линий могут не работать на старых платформах или других наборах символов. Используйте "+---+" для верхней и нижней строк и "|" для средних линий или убрать их вообще.
log-file
скрипт для регистрации команд для аудита файлов Вы можете заменить его своей собственной командой и откомментировать строку, удалив начальные #
,