如何从正在运行的系统中安全地移除 SATA 磁盘?

如何从正在运行的系统中安全地移除 SATA 磁盘?

我有时需要将磁盘插入磁盘托架。有时,我会采用非常奇怪的设置,即在笔记本电脑上使用 SATA-eSATA 电缆连接 SSD,同时从台式机获取电源。

如何安全地从系统中移除 SATA 磁盘?这菲罗尼克斯论坛帖子有一些建议:

justsumdood 写道:

An(noymous)droid 写道:
那么在拔掉插头之前你会在软件方面做什么?它是一个简单的“umount /dev/sd”[驱动器号]吗?卸载设备后,要“关闭”(或休眠)设备:

hdparm -Y /dev/sdX

(其中 X 代表您要关闭的设备。例如:/dev/sdb)

这将使驱动器断电,从而可以将其移除,而不会产生电压浪涌的风险。

这是否意味着磁盘缓存已正确刷新并随后关闭?

来自同一线程的另一个建议:

chithanh 写道:
所有 SATA 和 eSATA 硬件在物理上都能够热插拔(即,如果插入/拔出插头,则不会损坏)。

芯片组和驱动程序如何处理这个问题是另一个问题。某些驱动程序/芯片组组合无法正确处理热插拔,需要热插拔命令,如下所示:

echo 0 - 0 > /sys/class/scsi_host/hostX/scan

将 X 替换为适合您的 SATA/eSATA 端口的编号。

我怀疑这样做是否正确,但我也找不到任何证据反对它。

那么,从系统中删除附加磁盘的正确方法是什么?假设我已经卸载了磁盘上的每个分区并运行了sync.如果可能的话,请指出一些官方文档,我在 Linux 文档树中找不到任何内容,也找不到Linux ATA 维基

答案1

  1. 卸载磁盘上的所有文件系统。 ( umount ...)
  2. 停用所有 LVM 组。 ( vgchange -an)
  3. 确保没有任何东西使用该磁盘进行任何操作。
    • 您可以在这里拔掉硬盘,但建议也执行最后两个步骤
  4. 向下旋转 HDD。 (与 SSD 无关)( sudo hdparm -Y /dev/(whatever))
  5. 告诉系统,我们正在拔掉硬盘,以便它可以自行准备。 ( echo 1 | sudo tee /sys/block/(whatever)/device/delete)

如果您想格外小心,请先这样做echo 1 | sudo tee /sys/block/(whatever)/device/delete。这将从内核中取消注册该设备,因此您知道当你拔掉插头时,没有任何东西在使用它。当我对 eSATA 外壳中的驱动器执行此操作时,我可以听到驱动器的磁头自行停放,因此内核显然告诉驱动器准备断电。

如果您使用 AHCI 控制器,它应该能够处理设备被拔出的情况。如果您使用其他类型的 SATA 控制器,驱动程序可能会因热插拔而感到困惑。

根据我的经验,SATA 热插拔(使用 AHCI)在 Linux 中运行得很好。我拔掉了光驱,插入了硬盘,扫描了错误,创建了文件系统并将数据复制到其中,卸载并拔下了它,插入了不同的 DVD 驱动器,并刻录了光盘,所有这些都是在机器启动的情况下进行的和跑步。

答案2

关于什么eject /dev/sdX?在我的设置中,此命令会卸载、同步并关闭驱动器。

答案3

这两个部分用于不同的事情。

第一个是为了拔掉插头。第二个是为了堵塞

对于拔出,操作系统将在卸载操作期间同步数据。因此,如果磁盘已卸载(假设您实际上确实有完整的硬件支持),您可以关闭磁盘电源然后拔出它,而不会出现数据丢失或损坏的风险。

对于插入,设备应该被自动识别。如果没有,您可以执行该命令来触发总线扫描。一旦设备被识别,您就可以安装它。

需要说明的是,我只用 USB 驱动器做过此类事情。

答案4

实际上,SATA 驱动器在断电时会自动停放磁头。在驱动器仍在旋转时拉动驱动器不会导致问题。然而,旋转盘如果受到碰撞,很容易产生凹痕。当电力不稳定或太阳耀斑时,您会听到此声音。

大多数损坏通常是由未刷新的缓存和缓冲区中未提交的写入等引起的...这就是为什么您必须在删除驱动器之前卸载驱动器。 SCSI 命令只是一个很好的措施,并且可以达到相同的目的。

相关内容