我有一台(物理上)远程服务器,我想安全地销毁它。不幸的是,磁盘分区只有一个大的根分区,没有其他分区。我可以可靠地使用它dd
来擦除包含根文件系统的设备吗?
简单来说如下:
$ sudo nohup dd if=/dev/urandom of=/dev/sda bs=1024
显然,我永远看不到作业的输出,因此我无法验证它是否成功完成。dd
和nohup
程序应该足够小,并且此时服务器上没有其他程序在运行,因此没有理由在运行时将这些程序从内存中弹出。 它们会运行到完成吗,还是内核可能会在完成之前的某个时刻崩溃dd
?
我正在考虑其他可能性,但我会在单独的问题中询问这些问题。
答案1
是的, 这是绝对地有可能,但是需要做一些工作。
大多数答案都可以在 StackExchange 上找到,但我将在这里总结一下,并提供指向具有更详细和值得称赞的优秀信息的来源的链接。
- 构建基于内存的 Linux 环境并使用以下命令切换至该环境
pivot_root
。 - 确保您可以使用 从外部访问服务器
ssh
。 擦除根设备。
# nohup dd if=/dev/urandom of=/dev/sda bs=512 > wipe.log &
请不时地随时检查的进度
dd
,因为它通常不会给您任何进度迹象。# kill -USR1 [ddpid]
稍后再回来验证该过程是否已完成(检查日志文件)。查看磁盘以验证其上是否有随机垃圾而不是真正的文件系统。如果您愿意,可以第二次(或第三次)擦除它。
决定下一步做什么。
如果您愿意,您可以在这里停下来走开。当机器断电时,您将拥有一个不可启动的设备,并且该设备的安全程度由您决定
dd
。我决定接下来尝试做一件我以前没做过的事:远程构建 Linux 基础系统。所以我继续:
用于
fdisk
根据需要重新分区根设备,并用于mkfs
在这些分区上创建文件系统。- 使用
debootstrap
到安装基础 Debian 环境在(未来的)根文件系统上。 chroot
到新的基础环境,安装附加包(例如sshd
)内核和引导加载程序(例如grub
- 确保引导加载程序确实安装到设备上 - 而不仅仅是安装包)。- 使用
root_pivot
按照与上述步骤 1 相同的方式切换到新环境。启动所有服务(例如sshd
)以确保您能够通过 访问服务器ssh
。 - 重启。你的新操作系统应该已经准备就绪。
答案2
在企业环境中,您可能希望拥有某种带外管理,如 IPMI、iDRAC 或其他远程 KVM 解决方案。您将使用该系统启动到 liveCD,在其中可以执行和确认擦除。如果您的目标是安全擦除,那么您需要验证操作。您不能只是说“嗯,这应该有效”。因为即使它应该有效,也不意味着它确实有效。某些 IPMI 系统允许您从远程拥有的 ISO 远程启动。您可以使用一些简单的东西,例如 DBAN 映像。
答案3
这不是一个好答案,但我确实设法做了类似的事情。我正在sudo dd if=./bootcd-usb-debug.iso of=/dev/sda
将 ReactOS iso 写入我想要的 USB 驱动器,但由于我没有验证我正在运行的 Linux 系统。希望我可以恢复我的数据。