0

我编写了两组脚本,用于在 root 环境中的 linux 上清理存储驱动器。想就实施征求您的意见(是否是多余的?是矫枉过正还是可以简化脚本?)

脚本 A(针对支持 ATA 安全擦除的设备)

#!/bin/bash
lsblk
echo please choose the drives you want to issue secure erase in format sdx, note you will have to wake the pc up if it goes to sleep to continue:
read disk
for n in /dev/$disk* ; do sudo umount -f $n ; done
sudo parted /dev/$disk --script mklabel gpt
result=$( hdparm -I /dev/$disk | grep -P not'\t'frozen )
if [ -n "$result" ]
then
timeout 0.2 yes "QUICK BROWN FOX" > /dev/$disk
hdparm --user-master u --security-set-pass PASSWORD /dev/$disk
hdparm --user-master u --security-erase-enhanced PASSWORD /dev/$disk
sleep 2
hdparm --user-master u --security-set-pass PASSWORD /dev/$disk
hdparm --user-master u --security-erase PASSWORD /dev/$disk
sleep 2
search=$( timeout 5 strings /dev/$disk | grep "QUICK BROWN FOX" )
if [ -n "$search" ]
then
echo "SECURE ERASE FAILED FAILED FAILED!"
else
echo "SECURE ERASE SUCCESSFULL!"
fi
else
echo "Disk still frozen, use echo -n mem > /sys/power/state to sleep and wake the computer up to unfreeze the disk, or plug the hard drive out and plug it back and run the script again!"
fi
exit

脚本 B 针对 USB 驱动器/SD 卡:

#!/bin/bash
lsblk
echo please choose the drives you want to clean in format sdx:
read disk
for n in /dev/$disk* ; do sudo umount -f $n ; done
sudo parted /dev/$disk --script mklabel gpt
word1=$(tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 512  ; echo)
word2=$(tr -dc 'A-Za-z0-9!"#$%&'\''()*+,-./:;<=>?@[\]^_`{|}~' </dev/urandom | head -c 999  ; echo)
echo $word1 | sudo cryptsetup -vq luksFormat /dev/$disk
echo $word1 |sudo cryptsetup -vq luksOpen /dev/$disk "$disk"en
sudo mkfs.ext4 /dev/mapper/"$disk"en
sudo mkdir -p /media/"$disk"en
sudo mount /dev/mapper/"$disk"en /media/"$disk"en
sudo chmod -R 777 /media/"$disk"en
sudo echo $word2 > /media/"$disk"en/secretdoc.txt
sudo umount -f /dev/mapper/"$disk"en
sudo cryptsetup -vq luksClose /dev/mapper/"$disk"en
sudo shred -vn10 /dev/"$disk"
for n in /dev/$disk* ; do sudo umount -f $n ; done
sudo parted /dev/$disk --script mklabel gpt
echo Done!
exit

有人建议一些制造商没有正确实施 ATA 安全擦除,因此我实施了一种方法来检查数据是否确实已被清除(向其中写入一些字符串,并在完成安全擦除后再次尝试找到这些字符串)

对于 USB 驱动器/SD 卡,该脚本基本上会粉碎设备 10 次,我添加了 luks 加密,因为我认为它可能会有所帮助。我选择 10 是因为它看起来并没有那么极端,但毕竟这是一个主观的东西。

我理解 shred 的含义(它会损坏只能写入有限次的闪存)但是,我们中的一些人可能太小气而无法用锤子破坏设备。

这些脚本是我浏览一个又一个帖子、一个又一个博客的结果,我真的很想感谢那些向我提供他们代码片段视图的人,但我似乎无法找到所有这些。

想借此机会与大家分享代码并听取您的反馈,特别是关于使用这两个脚本进行数据清理的有效性。

4

0 回答 0