我有两种类型的计算机,一种硬盘类型是 NVME,另一种是通用硬盘。
我有一个脚本用于格式化磁盘,然后使用 Scrub 清理/擦除磁盘。
sudo mkfs -F /dev/nvme0n1
sudo scrub /dev/nvme0n1
在通用硬盘(非 NVME 磁盘)上,我必须修改代码如下:
sudo mkfs -F /dev/sda
sudo scrub /dev/sda
这些笔记本电脑默认可能包含或不包含操作系统。
我正在尝试找到一种方法来避免为 NVME 使用两个脚本 (1) (2) 用于标准驱动器。
换句话说,我想跳过“sda”或“nvme0n1”,因此脚本是通用的,如果可能的话可以在任一磁盘类型上运行?
更新:2023 年 11 月 1 日。
答案1
我假设您想在从运行完整版 Ubuntu 的 USB 启动后安全地擦除多台计算机的内部 SSD/HDD。完整版允许安装其他软件,而实时安装 USB 则不允许。
步骤 1:安装nvme-cli
此实用程序可让您安全地擦除 NVME 驱动器而不会损坏它们。打开终端并输入:
sudo apt install nvme-cli
第 2 步:编写 Bash 脚本
squeakyclean
在文件夹中创建一个名为的纯文本文件,$HOME/bin
其内容如下:
#!/bin/bash
# Purpose: find if there are any sata or nvme drives and take different
# action on the each such drive
while IFS= read -r line; do
case $line in
NAME | loop*)
;;
sd?)
echo "Found disk /dev/$line:"
lsblk /dev/"$line"
while true; do
read -p "Do you want to scrub $line? (y/n) " yn < /dev/tty
case $yn in
y)
echo sudo scrub /dev/"$line"
echo " "
break
;;
n)
echo "keeping $line"
echo " "
break
;;
*) echo "invalid response";;
esac
done
;;
nvme[0-9]n[1-9])
echo "Found disk /dev/$line:"
lsblk /dev/"$line"
while true; do
read -p "Do you want to format $line? (y/n) " yn < /dev/tty
case $yn in
y)
echo sudo nvme format -s1 /dev/"$line"
echo " "
break
;;
n)
echo "keeping $line"
echo " "
break
;;
*) echo "invalid response";;
esac
done
;;
*)
echo "$line found doing nothing"
;;
esac
done < <( lsblk -d -o name )
保存文件并使其可执行。
笔记:假设所有 SATA 驱动器都是 HDD。您可能应该使用其他实用程序,例如hdparm
用于清理 SATA SSD 的实用程序。
逻辑
首先,脚本使用命令lsblk
列出所有内部和外部磁盘。此列表可能如下所示:
NAME
sda
sdb
sdc
nvme0n1
nvme0n2
nvme0n3
其次,脚本会询问您是否要清理第一个 SATA 磁盘sda
。您必须输入y
或n
。然后,它会对第二个 SATA 磁盘执行相同的操作,sdb
等等。
第三,脚本会询问您是否要安全格式化第一个 NVMe 磁盘(nvme0n1
如果存在)。您必须输入y
或n
。然后,它会对第二个 NVMe 磁盘执行相同的操作,nvme0n1
等等。
最后,对于找到的任何其他磁盘,它会列出它们。
测试
以 身份运行脚本并查看其输出。这将告诉您它已找到哪些磁盘以及哪些磁盘将被清除。如果您的 USB 驱动器被识别为,/dev/sda
那么您必须更改脚本,以便它不会擦除您的 USB 驱动器。
步骤3:执行!
准备好后,删除脚本两行中的echo
before 。sudo
警告:执行此脚本将删除您计算机中的所有内容!
使用已完整安装 Ubuntu 的 USB 启动您想要清理的计算机。
打开终端并输入squeakyclean
。需要时,系统会要求您输入 sudo 密码。
希望这可以帮助