如何避免系统启动时 HDD 旋转?(从 SSD 启动 Ubuntu)

如何避免系统启动时 HDD 旋转?(从 SSD 启动 Ubuntu)

感谢hdparm -B1 /dev/sdb我的硬盘在启动时不再旋转。但在完成 BIOS POST 消息并启动 Ubuntu 后,硬盘通过 SATA 数据线收到信号并旋转。

保留数据线(但仍插入 SATA 电源线)让系统完全从我的 SSD 启动,而无需启动 HDD。

是什么导致 HDD 旋转起来?可能是 Grub2?


编辑:不,似乎不是 Grub2 启动了驱动器。我只是设置了 Grub 以显示其菜单而不使用计时器。直到我点击 Ubuntu 标准启动选项时才发生任何事情,然后几秒钟后驱动器开始旋转。


编辑:dmesg | grep sdb

[    7.080043] ata2.00: qc timeout (cmd 0xef)
[    7.080057] ata2.00: failed to IDENTIFY (SPINUP failed, err_mask=0x4)
[    9.830035] ata2: SATA link up 3.0 Gbps (SStatus 123 SControl 300)
[    9.836555] ata2.00: ATA-8: SAMSUNG HD105SI, 1AJ10001, max UDMA/133
[    9.836564] ata2.00: 1953525168 sectors, multi 0: LBA48 NCQ (depth 31/32)
[    9.842364] ata2.00: configured for UDMA/133
[    9.842644] scsi 1:0:0:0: Direct-Access     ATA      SAMSUNG HD105SI  1AJ1 PQ: 0 ANSI: 5
[    9.843249] sd 1:0:0:0: [sdb] 1953525168 512-byte logical blocks: (1.00 TB/931 GiB)
[    9.843270] sd 1:0:0:0: Attached scsi generic sg1 type 0
[    9.843487] sd 1:0:0:0: [sdb] Write Protect is off
[    9.843497] sd 1:0:0:0: [sdb] Mode Sense: 00 3a 00 00
[    9.843590] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[    9.844091]  sdb:
[    9.845127] scsi 2:0:0:0: CD-ROM            ATAPI    iHDS118   5      RL0C PQ: 0 ANSI: 5
[    9.851182] sr0: scsi3-mmc drive: 48x/48x cd/rw xa/form2 cdda tray
[    9.851191] Uniform CD-ROM driver Revision: 3.20
[    9.851554] sr 2:0:0:0: Attached scsi CD-ROM sr0
[    9.851802] sr 2:0:0:0: Attached scsi generic sg2 type 5
[    9.942896]  sdb1
[    9.943773] sd 1:0:0:0: [sdb] Attached SCSI disk

答案1

我认为您的意思是hdparm -s,而不是-B1,它要求 APM 兼容硬盘(基本上只指笔记本电脑硬盘)在短暂不活动后自动待机。此外,Western Digital 磁盘似乎不接受-s待机状态下开机的命令,但背面有一个跳线可用于启用它。

内核 sd(scsi 磁盘)驱动程序在第一次访问磁盘时启动磁盘,这在启动期间发生以扫描分区表。默认情况下,它还会在从挂起状态恢复后重新启动驱动器,但您可以通过写入0来禁用此功能/sys/block/sda/device/scsi_disk/*/manage_start_stop

hdparm -y我通常会这样做,然后在重新启动后手动暂停我不打算使用的驱动器。

我上一个主板的 BIOS 根本无法检测到待机状态下启动的驱动器,但我的新华硕 sandy bridge 显然足够“智能”,可以注意到驱动器处于待机状态并启动它。

答案2

很确定是控制器扫描磁盘的内核模块导致您的硬盘旋转。现在,如果我错了,它确实是您的硬盘模块,您可以在启动过程中阻止加载该模块。请查看黑名单/etc/modprobe.d/

答案3

我将查找 sdb(1) 的日志,从 dmesg 开始:

dmesg | grep /dev/sdb

答案4

Linux 会在启动时检查所有硬盘上的分区,因此会读取所有连接的硬盘上的分区表。仅此一项就会导致启动,但可能还有其他原因。

为了进行深入分析,据我所知,ureadahead 的后端工具会构建启动期间读取的设备块列表。您可以使用其日志来确定读取了哪些硬盘块,这是确定启动原因的第一步。

相关内容