如何将 520 字节扇区硬盘hdd格式化为 512 字节扇区
Sector(扇区)是硬盘中最小储存单位,一般情况下会是512 bytes的大小,但是使用在专业的Storage 储存装置上会使用520 bytes大小的Sector size。这“多出”的8 bytes是做什么的呢?通过查阅相关资料,多出来的那8 bytes厂商可以依据自己需求来定义,大多是储存错误检查相关的信息。这种具有520 bytes大小扇区的硬盘在接到我们常用硬件基础上的Windows或者Linux系统机器,操作系统启动非常慢,甚至可能因为磁盘问题导致系统异常,当用磁盘工具或者数据恢复相关工具对磁盘进行读取操作时,返回错误信息,硬盘无法进行任何读写操作,俗称“非标硬盘”。那我们如果在没有专业存储机的情况下,如何使用520 bytes扇区的硬盘呢?要想改变扇区大小,就需要借助相关工具,在Windos / Linux下有什么工具是可以改变Sector size呢?答案是肯定有的,市面上也有相关企业在运营这方面的软硬件。我们今天要说的,当然是Free的,而这个工具就是Sg,这个工具在RHEL系列镜像中皆有提供, 在我们今天的实际操作中用到的Ubuntu server 20.04系统也早有预装该工具,所以我们无需安装。sg_format主要是由套件sg3_utils、 sg3_utils_libs所提供,在其他Linux操作系统上,我们可以通过安装这个套件实现我们需要的功能。
基本环境
系统镜像
ubuntu-20.04.2-live-server-amd64.iso
-主机硬件
Thinkserver
-存储磁盘
HITACHI 450G 2.5吋 SAS (Sector size:520)
一、准备
1、开机进入操作系统(开机前及开机过程中存储磁盘暂时不要插上去,否则可能因为储存磁盘报错或者硬件故障导致系统无法正常操作,并浪费时间);
2、开机完成后,插入数据硬盘HITACHI 450G(当然前提是得支持硬盘热插拔),硬盘盘位灯可能闪烁;
3、待硬盘盘位灯状态不再闪烁,我们可以通过执行命令(lsblk通常是无法看到未格式化完成520扇区的硬盘):
ls /dev/sg*
1
来查看盘位上的硬盘数量是否大致正确,当然这其中如果服务器硬件存在阵列卡以及必要的系统硬盘,它们都会被识别为其中的sg符号设备,也就是说sg0可能是系统盘,sg1可能是阵列卡,磁盘编号顺序根据系统识别顺序而来。我们可以通过执行sudo sg_format /dev/sg[number]来获取相关硬件信息(产品名称、规格、序列号以及磁盘扇区大小等等),比如:
test@test:~$ sudo sg_format /dev/sg0
ATA TurXun S500 128G 207 peripheral_type: disk [0x0]
Unit serial number: 2021000001325
LU name: 5000000000000533
Mode Sense (block descriptor) data, prior to changes:
Number of blocks=0 [0x0]
Block size=512 [0x200]
Read Capacity (10) results:
Number of logical blocks=250069680
Logical block size=512 bytes
No changes made. To format use ‘–format’. To resize use ‘–resize’
根据实际硬件,可以判断为系统硬盘↖
test@test:~$ sudo sg_format /dev/sg1
NETAPP X421_HCOBD450A10 NA05 peripheral_type: disk [0x0]
<< supports protection information>>
Unit serial number: PNGW7G4Y
LU name: 5000cca012318808
Mode Sense (block descriptor) data, prior to changes:
Number of blocks=879097968 [0x3465f870]
Block size=520 [0x208]
Read Capacity (10) results:
Number of logical blocks=879097968
Logical block size=520 bytes
No changes made. To format use ‘–format’. To resize use ‘–resize’
根据实际硬件,可以判断为数据硬盘↖
test@test:~$ sudo sg_format /dev/sg12
LSI Bobcat 1302 peripheral_type: enclosure services device [0xd]
Unit serial number:
LU name: 56c92bf000345abd
MODE SENSE (10) command: Illegal request, Invalid opcode
try ‘-v’ for more information
sg_format failed: Illegal request, Invalid opcode
根据实际硬件,可以判断为阵列卡↖
二、低格操作
1、根据执行sudo sg_format /dev/sg[number]获取的信息中,我们可以得到具有Block size=520的磁盘sg[number],接下来就是对其进行低格操作,执行sudo sg_format -v –format –size=512 /dev/sg[number],例:
test@test:~$ sudo sg_format -v –format –size=512 /dev/sg1
2 NETAPP X421_HCOBD450A10 NA05 peripheral_type: disk [0x0]
3 PROTECT=1
4 << supports protection information>>
5 Unit serial number: PNGW7G4Y
6 LU name: 5000cca012318808
7 mode sense(10) cdb: 5a 00 01 00 00 00 00 00 fc 00
8 Mode Sense (block descriptor) data, prior to changes:
9 Number of blocks=879097968 [0x3465f870]
10 Block size=520 [0x208]
11 mode select(10) cdb: 55 11 00 00 00 00 00 00 1c 00
12 A FORMAT UNIT will commence in 15 seconds
ALL data on /dev/sg1 will be DESTROYED
Press control-C to abort
A FORMAT UNIT will commence in 10 seconds
ALL data on /dev/sg1 will be DESTROYED
Press control-C to abort
A FORMAT UNIT will commence in 5 seconds
ALL data on /dev/sg1 will be DESTROYED
Press control-C to abort
Format unit cdb: 04 18 00 00 00 00
Format unit has started
Format in progress, 1.99% done
Format in progress, 3.99% done
执行后,通常是有15秒的犹豫期,也就是在执行命令后15秒内,你可以通过Ctrl+c终止掉任务,避免操作错误。最下方Format in progress, 3.99% done 中的百分比就是低格进度,当这个过程结束,硬盘即从520扇区低格到512扇区完毕;
2、格式化完毕后,通常在没有刷新磁盘设备总线的情况下,执行lsblk任然会找不到可用的存储硬盘,我们可以通过执行下列命令去刷新磁盘总线:
查找所有磁盘总线,并记下host[number];
1 ls -l /sys/class/scsi_host/
依次刷新总线,直到所有磁盘识别完毕
1 sudo sh -c “echo ‘- – -‘ > /sys/class/scsi_host/host0/scan”
2 sudo sh -c “echo ‘- – -‘ > /sys/class/scsi_host/host1/scan”
3 sudo sh -c “echo ‘- – -‘ > /sys/class/scsi_host/host2/scan”
4 sudo sh -c “echo ‘- – -‘ > /sys/class/scsi_host/host3/scan”
5 …
3、当然也有笨方法,对所有格式化的数据硬盘重新插拔或者干脆重启系统…;
4、待磁盘识别完毕,你就可以进行分区和格式化文件系统相关操作了。
三、批量操作
1、可以通过循环获取sudo sg_format /dev/sg[number]信息,筛选Block size=520磁盘进行格式化操作;
2、通过nohup命令可以将命令切入后台执行,后续进度可以通过sudo sg_format /dev/sg[number]获取格式化进度;
3、通过循环获取磁盘总线number,批量刷新磁盘状态(也可以通过echo 1 > /sys/block/sdx/device/delete剔除特定问题磁盘);
4、对于系统lsblk已经识别到的磁盘,但是分区和格式化时出错,而这个错误不是由于硬盘硬件问题导致的,可能由于格式化进程意外中止导致,这种情况可以通过再次低格得到解决,定位查询:
ls -l /dev/disk/by-id/ |grep sdx
得到磁盘scsi ID号(eg:scsi-35000cca012318808)
再通过
sudo sg_format /dev/sg[number]
得到LU name: 5000cca012318808,与之前csi ID号比对得到具体磁盘sg[number];
5、如果需要对磁盘进行硬件定位,也可以参考上条得到Unit serial number: PNGW7G4Y或者LU name: 5000cca012318808,并与阵列相关工具获取的磁盘信息进行比对得到sloto number,然后借助工具并点亮磁盘盘位状态灯。
————————————————
原文链接:https://blog.csdn.net/weixin_43702883/article/details/117768589