步骤 1:安装nvme-cli

步骤 1:安装nvme-cli

我有两种类型的计算机,一种硬盘类型是 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 日。

lsblk -d -o 名称 名称 loop0 loop1 loop2 loop3 loop4 loop5 loop6 loop7 loop8 loop9 loop10 loop11 loop12 loop13 loop14 sda sdb nvme0n1 在此处输入图片描述

在此处输入图片描述

在此处输入图片描述

答案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。您必须输入yn。然后,它会对第二个 SATA 磁盘执行相同的操作,sdb等等。

第三,脚本会询问您是否要安全格式化第一个 NVMe 磁盘(nvme0n1如果存在)。您必须输入yn。然后,它会对第二个 NVMe 磁盘执行相同的操作,nvme0n1等等。

最后,对于找到的任何其他磁盘,它会列出它们。

测试

以 身份运行脚本并查看其输出。这将告诉您它已找到哪些磁盘以及哪些磁盘将被清除。如果您的 USB 驱动器被识别为,/dev/sda那么您必须更改脚本,以便它不会擦除您的 USB 驱动器。

步骤3:执行!

准备好后,删除脚本两行中的echobefore 。sudo

警告:执行此脚本将删除您计算机中的所有内容!

使用已完整安装 Ubuntu 的 USB 启动您想要清理的计算机。

打开终端并输入squeakyclean。需要时,系统会要求您输入 sudo 密码。

希望这可以帮助

相关内容