dev=$1
#编译
g++ test.cpp -g -O2 -lpthread -std=c++11
#硬盘分区
parted $dev --script mklabel gpt
parted $dev --script mkpart primary 0 25%
parted $dev --script mkpart primary 25% 50%
parted $dev --script mkpart primary 50% 75%
parted $dev --script mkpart primary 75% 100%
#分别执行a.out文件
nohup ./a.out ${dev}1 > testlog1 2>&1 &
nohup ./a.out ${dev}2 > testlog2 2>&1 &
nohup ./a.out ${dev}3 > testlog3 2>&1 &
nohup ./a.out ${dev}4 > testlog4 2>&1 &
#检查结果
sleep 300
for i in {1...4}
do
result=`cat testlog$i | grep "a.out: test.cpp:137: void Reader::read(int64_t): Assertion \`0' failed." | wc -l`
if [ $result -gt 0 ];then
echo "this disk is Failed"
exit 7
fi
done
echo "this disk is Pass"
解析:
(1)parted /dev/sda --script mklabel gpt
解析:设置分区类型为gpt,这里注意gpt和MBR分区格式的区别
(2)parted /dev/sda --script mkpart primary ${partion_start} ${partion_end}
解析:parted是分区命令。
/dev/sda:是要被分区的设备;
--script mkpart primary ${partion_start} ${partion_end}:primary指定分区是主
分区,partion_start是分区开始的位置,partion_end是分区结束的位置,分区的
起始、结束位置在分区表里指明;
补充:如果分区的起始地址是设备的开头地址可以写成0%,如果分区的结束地址是设备的最后的
地址可以写成100%。
(3)parted /dev/sda --script print
打印当前分区
为什么用parted进行分区:
分区命令可以用parted、fdisk,我这里使用的是parted。fdisk和parted的区别主要是fdisk只支持小于2T的硬盘并且不支持GPT格式。
(1)MBR最大支持卷2T,最多4个主分区或者3个主分区加一个扩展分区;
(2)gpt最大支持18EB(1EB=1024T),最多128个分区;
(3)如果存储设备超过2T则必须用gpt格式分区;
分区后格式化分区:
格式化分区就是在分区上创建文件系统,每种文件系统对硬盘的管理策略都不同,用mke2fs命令格式化分区,具体格式化成哪种文件系统根据具体需求。
(1)mke2fs -t ext4 -F -b 4096 -L "boot" /dev/${disk_name}
解析:
-t ext4:指定文件系统;
-F:强制mke2fs创建文件系统,即使指定的设备不是块特殊设备上的分区;
-b 4096:指定文件系统上块的大小,有效值1024、2048、4096;
-L "boot":给文件系统设置卷标名
/dev/${disk_name}:分区名
分区挂载:
第一步:partitionName=$(blkid -o device -t LABEL="boot")
blkid主要用来对系统的块设备(包括交换分区)所使用的文件系统类型、LABEL、UUID等
信息进行查询。
blkid -o device:查看设备的信息
-t LABEL="dom_bin":只看LABEL为"dom_bin"的设备
第二步:mount -t ext4 -o discard $partitionName /mnt/database