灰儿 发表于 2016-6-9 15:55:58

用dmraid命令管理板载BIOS RAID磁盘陈列及清除残留RAID信息

在给板载RAID的服务器安装ubuntu server 12.04 系统时,当到分区界面时,提示无法格式化操作,原因为磁盘拥有旧的raid信息,我们需要清除raid 元数据,才能继续安装系统。

常用dmraid命令参数示例:
查看是否有软raid并激活磁盘阵列命令:dmraid -ay
读取raid磁盘阵列设备信息:# dmraid –r

另一种参数查看raid磁盘阵列设备信息:# dmraid -sERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" on/dev/sda*** Group superset .ddf1_disks--> *Inconsistent*Active Subsetname : ddf1_4035305a8680b02520202020202020209a33c30a3a354a45size : 145051648stride : 128type : mirrorstatus : inconsistentsubsets: 0devs : 1spares : 0
# dmsetup statusddf1_4035305a8680b02520202020202020209a33c30a3a354a45:0 145051651 linear
停用磁盘阵列命令:dmraid -a no# dmraid -a noERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" on/dev/sdaERROR: device"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" could not befoundRAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" is not active#


清除磁盘上旧RAID的信息,操作方法详解:先用常规命令试试:dmraid –x:# dmraid -xERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" on/dev/sda
About to delete RAID setddf1_4035305a8680b02520202020202020209a33c30a3a354a45
WARNING: The metadata stored on theraidset(s) will not be accessible after deletionDo you want to continue ? :yERROR: Raid set deletion is notsupported in "ddf1" format#


发现出现错误,使用另一个方法:dmraid -rE# dmraid -rEDo you really want to erase"ddf1" ondisk metadata on /dev/sda ? :yERROR: ddf1: seeking device"/dev/sda" to 38070153641984ERROR: writing metadata to /dev/sda, offset74355768832 sectors, size 0 bytes returned 0ERROR: erasing ondisk metadata on /dev/sda#


同样也清除不了,再使用mdadm进行清除:
# mdadm --zero-superblock /dev/sda

出现不能打开磁盘的错误。释放对磁盘的使用:# dmsetup remove_all


最后找到了一个暴力的方法,用dd_rescue直接把硬盘上的数据写为0,使用DD命令进行操作如下:
# dd if=/dev/zero of=/dev/sda bs=512 seek=3904294912



假设两块硬盘都为250G大小,清除残留RAID信息,命令如下:# dd if=/dev/zero of=/dev/sda bs=512 seek=488000000# dd if=/dev/zero of=/dev/sdb bs=512 seek=488000000或# dd if=/dev/zero of=/dev/sda bs=1k seek=244000000# dd if=/dev/zero of=/dev/sdb bs=1k seek=244000000
dd指令解释:if=file:输入文件名,缺省为标准输入
of=file:输出文件名,缺省为标准输出
bs=bytes:同时设置读写块的大小为 bytes ,可代替 ibs 和 obs
seek=blocks:从输出文件开头跳过 blocks 个块后再开始复制。

因为raid信息一般那保存在硬盘的最后,只是清除最后1GB就可以了。seek=488000000表示写入的时候从/dev/sda偏移 488,000,000 个blocks,即从244G处开始写入,这里提到block的是相对于bs来说的,默认bs是512bytes,那么1block=512bytes,如果将bs改为1k,那么1block=1k。

终于将raid信息进行清除,可以正常安装linux系统了。
另一个硬盘清零命令:
dd if=/dev/zero of=/dev/sda   #全部硬盘清零
这个命令很慢,如果硬盘很大,需要好几个小时。
清除残留RAID信息总结:最有效的解决方法就是对做过RAID的硬盘做写0操作,之后再放到系统里去,关于写0,不能直接挂载在系统里做,必须在其它linux系统下操作,也不必全写0,因为raid信息一般那保存在硬盘的最后,只是清除最后1GB就可以了。



灰儿 发表于 2016-6-9 18:22:47

dd命令的主要选项:指定数字的地方若以下列字符结尾乘以相应的数字:b=512, c=1, k=1024, w=2, xm=number mif=file #输入文件名,缺省为标准输入。
of=file #输出文件名,缺省为标准输出。
ibs=bytes #一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。
obs=bytes #一次写 bytes 个字节(即一个块大小为 bytes 个字节)。
bs=bytes #同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。
cbs=bytes #一次转换 bytes 个字节,即转换缓冲区大小。
skip=blocks #从输入文件开头跳过 blocks 个块后再开始复制。
seek=blocks #从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)。
count=blocks #仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。
conv=conversion[,conversion...] #用指定的参数转换文件。
页: [1]
查看完整版本: 用dmraid命令管理板载BIOS RAID磁盘陈列及清除残留RAID信息