我之所以写这篇文章,是因为我最近在尝试修复一台十几年前的老笔记本(电脑的型号是联想的G470)。 我用了一块,大概几年前买的1TB的西部数据的SMR烂磁盘,和我另一台坏电脑上拆下来的2x8G的内存条来修复它。 老马拉破车,修复以后也不会让它跑太重的任务,可能也就跑一些爬虫或者定时任务的脚本,以Stateless的任务为主。再坏掉的话我可能会丢掉这台电脑,毕竟这玩意儿也就比树莓派强一些。
于是乎我在这台老电脑上装了最新的Debian操作系统,配XFCE轻量界面,即使是这样的界面,我也默认关闭了,平时启动只会启动命令行。 这里唯一的问题是这个磁盘,它有一些坏道,一旦操作系统读写到了这些坏道就有可能死机,本着没坏就往死里用的精神,我需要屏蔽这些坏道使用。
注意:正常的电脑请不要模仿这里的操作,如果磁盘到寿命了,应该尽快更换新的磁盘(哪怕它还能用)。
关于硬盘相关的内容,请看我以前的文章:构建家用NAS过程中的碎碎念
先sudo fdisk -l一下确认我有哪些硬盘:
Disk /dev/sda: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: WDC WD10SPZX-22Z
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: dos
Disk identifier: 0x826de920
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 1920008191 1920006144 915.5G 83 Linux
/dev/sda2 1920010238 1953523711 33513474 16G f W95 Ext'd (LBA)
/dev/sda5 1920010240 1953523711 33513472 16G 82 Linux swap / Solaris
Partition 2 does not start on physical sector boundary.
其中sda1是主分区,sda2是扩展分区,下面包含sda5这个swap逻辑分区。 这里可以看到Partition 2 does not start on physical sector boundary.是因为我装debian的时候偷懒,没有手动调整分区而是让安装器自己去分了。
这个时候推荐用Debian的安装盘(U盘)启动另一个系统,因为修复坏扇区的时候要求系统盘不被挂载。
主分区是EXT文件系统,这个时候我们可以用Debian自带的badblocks来扫描坏道(没有的话可以试试安装sudo apt install e2fsprogs):
这个扫描可能运行很久,最好放着跑一晚上。
我稍微数了一下,已经有56个坏道,可见硬盘已经到寿命了,这个电脑上运行的任何东西都需要随时备份,做好随时崩溃的准备。
修复SDA1(将坏道标记为不可用)
别的系统可以用fsck,它本质上是个代理,会调用合适的程序去处理相应的文件系统。
修复SWAP的时候就不需要Rescue模式下了,因为SWAP可以关闭再打开而不会影响系统和运行。
SWAP分区也在同一块硬盘上,自然也会有相应的问题。
首先关闭所有SWAP分区:sudo swapoff -a
随后创建新的SWAP分区:sudo mkswap -c /dev/sda5
其中参数c的意思是check这个磁盘,跳过有问题的扇区
有的时候如果是外部修改,硬件的UUID可能变化而加载不上,可以试试看lsblk -f列出所有的硬件的UUID,然后手动修改/etc/fstab
https://www.tecmint.com/check-linux-hard-disk-bad-sectors-bad-blocks/
https://www.man7.org/linux/man-pages/man8/mkswap.8.html