32位arm架构磁盘超过16TB分区

背景:

        最近在解决一个22TB大小的Raid5的阵列分区信息消失的问题的时候,按照既定的策略对写入分区信息的阵列位置进行清零操作 --- 即在①阵列节点头部从LAB0的位置往后2MB进行写0操作,同时,②对阵列尾部最后2MB进行写0操作。这个两个位置是写入GPT分区的位置,清零操作的原因是:gpt信息的大小不够一个Raid条带,当其中某些磁盘存在脏数据时,掉盘之后,Raid5无法通过校验盘来恢复正确的数据。

操作:

        open一下阵列节点md0,ope属性是RW,然后用一个longlong类型来记录偏移,便于lseek64到阵列末尾,写入2MB大小的0数据。为了确认数据确实写入到对应的位置,放开了blockdump和内核打印信息。

echo 1 > /proc/sys/vm/block_dump  /*开始记录IO*/
echo 0 > /proc/sys/vm/block_dump  /*关闭blockdump*/

echo 9 > /proc/sys/kernel/printk  /*放开最高等级内核打印*/

        放开信息之后,开始执行清零操作,通过打印信息发现头部写入的数据和偏移是正确的,而尾部写入的数据偏移总是在6TB的位置,加打印确认偏移大小是没有问题的。lseek64返回的信息也是正确的,仔细想了一下应该是32位系统seek寻址最大是16TB的问题导致的,16TB+6TB正好是阵列大小。可是,为什么32位系统只能寻址到16TB呢?难道无法支持16TB以上的写入?显然,这个问题是常见问题,不可能是我第一个发现的,一定是哪里没有了解清楚。

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值