热搜词
发表于 2016-6-9 15:55:58 | 显示全部楼层 |阅读模式
在给板载RAID的服务器安装ubuntu server 12.04 系统时,当到分区界面时,提示无法格式化操作,原因为磁盘拥有旧的raid信息,我们需要清除raid 元数据,才能继续安装系统。


常用dmraid命令参数示例:

查看是否有软raid并激活磁盘阵列命令:
dmraid -ay

读取raid磁盘阵列设备信息:
# dmraid –r


另一种参数查看raid磁盘阵列设备信息:
[root@web1 ~]# dmraid -s
ERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" [1/2] on/dev/sda
*** Group superset .ddf1_disks
--> *Inconsistent*Active Subset
name : ddf1_4035305a8680b02520202020202020209a33c30a3a354a45
size : 145051648
stride : 128
type : mirror
status : inconsistent
subsets: 0
devs : 1
spares : 0

[root@web1 mapper]# dmsetup status
ddf1_4035305a8680b02520202020202020209a33c30a3a354a45:0 145051651 linear

停用磁盘阵列命令:dmraid -a no
[root@web1 conf]# dmraid -a no
ERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" [1/2] on/dev/sda
ERROR: device"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" could not befound
RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" is not active
[root@web1 conf]#


清除磁盘上旧RAID的信息,操作方法详解:
先用常规命令试试:
dmraid –x
[root@web1 ~]# dmraid -x
ERROR: ddf1: wrong # of devices in RAID set"ddf1_4035305a8680b02520202020202020209a33c30a3a354a45" [1/2] on/dev/sda

About to delete RAID setddf1_4035305a8680b02520202020202020209a33c30a3a354a45

WARNING: The metadata stored on theraidset(s) will not be accessible after deletion
Do you want to continue ? [y/n] :y
ERROR: Raid set deletion is notsupported in "ddf1" format
[root@web1 ~]#

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

dmraid-rE.png

同样也清除不了,再使用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就可以了。




全部评论1
灰儿 发表于 2016-6-9 18:22:47 | 显示全部楼层
dd命令的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m
if=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...] #用指定的参数转换文件。

回复

使用道具 举报

回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2025-4-17 15:32 , Processed in 0.201226 second(s), 27 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2025 Discuz! Team