Top
分区工具-----parted
# 注意:parted命令不会修改/etc/fstab文件;创建完分区后,需手动修改/etc/fstab文件
选项及含义
选项 |
含义 |
-l【--list】 |
列出所有设别的分区信息 |
-i 【--interactive】 |
在必要时,提示用户 |
-s【--script】 |
避免和用户交互;即关闭交互式 |
-j【--json】 |
json 格式输出 |
子选项命令
检查 MINOR # 对文件系统进行一个简单的检查
cp [FROM-DEVICE] FROM-MINOR TO-MINOR # 将文件系统复制到另一个分区
help [COMMAND] # 打印通用求助信息,或关于 COMMAND 的信息
mklabel,mktable LABEL-TYPE # 创建新的磁盘分区表
mkfs MINOR 文件系统类型 # 在 MINOR 创建类型为“文件系统类型”的文件系统
mkpart 分区类型 [文件系统类型] 起始点 终止点 # 创建一个分区
move MINOR 起始点 终止点 # 移动编号为 MINOR 的分区
name MINOR 名称 # 将编号为 MINOR 的分区命名为“名称”
print [devices|free|list|all|] # 显示分区表;包括可用设备、可用空间、所有找到的分区或特定的划分
print [MINOR] # 打印分区表,或者分区
unit UNIT # 设置显示默认单位
quit # 退出程序
rescue 起始点 终止点 # 挽救临近“起始点”、“终止点”的遗失的分区
resize MINOR 起始点 终止点 # 改变位于编号为 MINOR 的分区中文件系统的大小
rm MINOR # 删除编号为 MINOR 的分区
select 设备 # 选择要编辑的设备
set MINOR 标志 状态 # 改变编号为 MINOR 的分区的标志
disk_set DISK_TYPE DISK_STATUS # 更改分区类型和状态
# UNIT -- 打印信息可用的单位
s:扇区(n个字节,取决于扇区大小,通常为512)
B:字节
KiB:千字节(1024字节)
MiB:兆字节(1048576字节)
GiB:gibibyte(1073741824字节)
TiB:tebibyte(1099511627776字节)
kB:千字节(1000字节)
MB:兆字节(1000000字节)
GB:千兆字节(1000000000字节)
TB:兆字节(1000000000000字节)
%:设备的百分比(0到100之间)
cyl:柱面(与BIOS CHS几何相关)
chs:柱面,磁头,扇区寻址(与BIOS CHS几何相关)
compact:这是一个特殊的单位,默认输入为兆字节,并且选择一个单位,以紧凑的可读格式表示输出
# LABEL-TYPE -- 可用的磁盘分区表标识; (其中 msdoc 即 MBR 分区,MBR 磁盘不能大于 2 TB,否则将会强制只使用 2 TB)
"aix", "amiga", "bsd", "dvh", "gpt", "loop", "mac", "msdos", "pc98", "sun"
# PART-TYPE -- 创建分区时可用的分区类型
"primary", "extended", "logical"
# FS-TYPE -- 创建分区时可用的文件系统类型
"btrfs", "ext2", "ext3", "ext4", "fat16", "fat32", "hfs", "hfs+", "linux-swap", "ntfs", "reiserfs", "xfs"
# DISK_TYPE -- disk_set 更改分区时可用的分区类型
"boot", "root", "swap", "hidden", "raid", "lvm", "lba", "legacy_boot", "palo"
# DISK_STATUS -- disk_set 更改分区时可用的分区类型
"on", "off"
# q, qu, qui, quit:退出交互式parted;只有在Parted退出后,Linux内核才能知道Parted对磁盘所做的更改
命令示例
非交互式创建分区
# 以下创建分区的方式都是等价的,为 ext4 分区, 或之后再使用 mkfs 命令创建文件系统
parted /dev/sdb mkpart primary 1 50
parted -s -- /dev/sdb mkpart shiwei ext4 50 100
echo "mkpart data ext4 1 50M" | parted /dev/sdb
# 同时创建 3 个分区, 前两个为 ext4 类型, 第 3 个未知
parted /dev/sdb mkpart ext4 1 50 mkpart ext4 50 100 mkpart ext4 100 150
# NVME 6.4T 创建两个分区,各50%空间;
parted -s -- /dev/nvme6n1 mklabel gpt mkpart ext4 0 50% mkpart ext4 51% 100%
非交互式删除分区
parted /dev/sdb rm 1 # 指定分区编号
parted /dev/sdb rm 2 rm 3 rm 5 # 同时删除多个分区
# 批量删除 127 个分区,但挺慢 , 一秒一个
for ddd in `seq 1 127`; do parted /dev/sdb rm ${ddd}; done
打印分区表
parted /dev/sdb p # parted /dev/sdb print
修改分区名称
parted /dev/sdb name 1 shiwei # 需注意指定的为原分区的编号
修改分区大小
# 注意修改分区大小只可缩容 或者是 扩容时利用闲置 柱面, 最后一个参数为柱面号
parted /dev/sdb resizepart 1 800 # 设置 第一个 分区结束柱面为 800
参考网址
Linux磁盘分区--GPT分区
磁盘分区工具------ fdisk
sd代表的是SCSI,SATA接口硬盘
hd代表IDE接口的硬盘
sda和hda最后面的a都代表的是第一块硬盘
sda1和hda1则代表的是该硬盘的第一分区
选项和含义
命令flags标记及功能
标记命令 |
含义 |
m |
输出帮助信息 |
a |
设置启动分区 |
b |
编辑分区标签 |
d【delete】 |
删除一个分区 |
l【list】 |
列出分区类型 |
n【new】 |
创建新的分区 |
p【print】 |
打印分区表 |
w【write】 |
保存分区表 |
q【quit】 |
退出不保存设置 |
t |
改变分区 ID |
u |
改变显示的单位 |
o |
创建一个新的空白的 Dos 分区表 |
v |
检查验证分区表 |
命令示例
展示硬盘详细信息
fdisk -l
# 单独展示某一个盘详细分区信息
fdisk -l /dev/sda
非交互式打印分区表
fdisk /dev/sdc << EOF
p
q
EOF
# 第二种方式将命令写入文件
cat commands | fdisk /dev/sdc
非交互式创建 GPT 格式分区
# 先要创建 GPT 格式分区表, 会自动删除老的分区表,
printf "g\n p\n w\n" | fdisk /dev/sdb
printf "n\n \n \n +100M\n n\n \n \n +100M\n n\n \n \n +100M\n p\n w\n" | fdisk /dev/sdb
# 迅速创建 128 个分区
for ddd in `seq 1 128`;do printf "n\n \n \n +100M\n p\n w\n" | fdisk /dev/sdb ; done
非交互式删除分区
# 注意在每个命令的后面都要添加一个换行符,且之间不能有多余的字符,例如:空格等, 命令之间用空格隔开
echo -e "d\n 3\n d\n 2\n d\n w\n p\n q" | fdisk /dev/sdb
printf "d\n 2\n p\n w\n" | fdisk /dev/sdb
# 迅速删除 127 个分区
for ddd in `seq 1 128`; do printf "d\n${ddd}\nw\n" | fdisk /dev/sdb ; done
# 第二种方式
echo > fdisk ; for ddd in `seq 1 128`; do printf "d\n${ddd}\n" ; if [ $ddd -eq 128 ]; then printf "w\n"; fi; done >> fdisk ; wait; cat fdisk | fdisk /dev/sdb ;
迅速挂载 128个分区
# 分区
for ddd in `seq 1 128`;do printf "n\n \n \n +100M\n p\n w\n" | fdisk /dev/sdb ; done
# 创建文件系统
for ddd in `seq 1 128`; do mkfs -t ext4 /dev/sdb${ddd}; done
# 挂载
for ddd in `seq 1 128`; do mount -o rw,noatime,nodiratime,nobarrier /dev/sdb${ddd} /data/${ddd}; done
# 配置开机自动挂载
for ddd in `seq 1 128`; do echo -e "/dev/sdb${ddd}\t/data/${ddd}\text4\trw,noatime,nodiratime,nobarrier\t0\t0" >> /etc/fstab ; done
磁盘格式化工具 --- mkfs
# 格式化 ext4
mkfs.ext4 <Partition>
# 格式化 btrfs
mkfs.btrfs <Partition>
# 临时挂载
mount <Partition> <Point>
# 永久挂载
修改 /etc/fstab 文件
# 查看分区
lsblk, fdisk , parted
# 自动输入 'y' , 格式化
yes | mkfs.ext4 <Partition>
自动化脚本
# 要求
1.满配置待测试部件于对应的引入机型上,并确保软件版本信息准确
2.分别在所有槽位的待测试部件上创建两个物理分区(对于os盘,创建两个逻辑分区),每个分区占待测试ssD的50%空间大小(对于os盘,每个逻辑分区大小不低于10G)
3.针对所有槽位的待测试部件,在步骤2中创建的第1个分区上创建一个EXT4的文件系统,并分别挂载到一个指定的目录下。
4.针对所有槽位的待测试部件,在步骤 3 中创建的目录下,分别写入一个 100G 的文件( OS盘写入1G的文件 ),并利用 md5sum 指令为计算该文件MD5码,并将产生的MD5码输出到一个文件中;
分区, 挂载, 自动写文件 --- 自动化脚本
#!/bin/bash
# 获取实时时间
gdate () {
echo $(date +%Y.%m.%d.%H.%M.%S)
}
kkrint () {
if [ "${1}" = '#' ]; then
printf "\n\n\n1:[$(gdate)]\033[34m\t\t\t\t${2}\033[0m\n\n\n\n" >> disk_all_log
elif [ "${1}" = "##" ]; then
printf "\n\n2:[$(gdate)]\t\t\033[32m${2}\033[0m\n\n\n" >> disk_all_log
elif [ "${1}" = "###" ]; then
printf "\n3:[$(gdate)]\t\033[32m${2}\033[0m\n\n" >> disk_all_log
elif [ "${1}" = "error" ]; then
printf "\033[31me:[$(gdate)]Error: ${2}\033[0m\n" >> disk_all_log
else
printf "\033[35mi:[$(gdate)]:\033[0m ${1}\n" >> disk_all_log
fi
}
declare -A jishu_part_file_arr
# 给每个盘的第一个分区挂载并写一个大的10G文件
disk_mkpart_write (){
:<<!
para 1: before or after
!
if [[ "${1}" == "before" ]]; then
os_disk=$(lsblk |grep -i 'boot' -B 1 |grep disk |awk '{print $1}')
no_os_disk_li=$(echo $disk_symbol_li | sed "s/${os_disk}//g")
no_os_disk_dev_li=$(echo $no_os_disk_li | awk '{ii=1;while(ii<=NF){printf("%s%s ","/dev/",$ii); ii++;}}')
# 卸载所有挂载目录
for ii in $(lsblk $no_os_disk_dev_li -o "MOUNTPOINTS" -n | xargs); do umount ${ii}; done
# 格式化所有待测盘
for ii in $no_os_disk_dev_li; do parted -s -- ${ii} mklabel gpt; done
# 设置挂载点所在目录
mount_dir_prefix="/home"
# 1. 创建分区
for ddi in ${no_os_disk_dev_li}
do
parted -s -- ${ddi} mklabel gpt mkpart ext4 0 50% mkpart ext4 51% 100%
kkrint "Create two partition of ${ddi}"
done
# 获取所有的分区完整路径
no_os_disk_part_li_jishu=$(lsblk ${no_os_disk_dev_li} -p -l -n -x "NAME" | grep part | sed 'N;P' -n | awk '{print $1}' | xargs)
no_os_disk_part_li_oushu=$(lsblk ${no_os_disk_dev_li} -p -l -n -x "NAME" | grep part | sed 'n;p' -n | awk '{print $1}' | xargs)
# 2. 创建文件系统
echo -e "\n开始给每个待测盘第一个分区创建 Ext4 文件系统, 请稍等片刻......\n"
for ppi in ${no_os_disk_part_li_jishu} ${no_os_disk_part_li_oushu}
do
yes | mkfs.ext4 ${ppi}
kkrint "Creating a Ext4 File System: ${ppi}"
done
# 3. 挂载
echo -e "\n开始给每个待测盘第一个分区挂载, 请稍等片刻......\n"
for mmi in ${no_os_disk_part_li_jishu}
do
mount_point_dir="${mount_dir_prefix}/${mmi##*/}"
mkdir ${mount_point_dir} -p
mount ${mmi} ${mount_point_dir}
kkrint "mount ${mmi} ${mount_point_dir}"
done
wait ; sleep 1
# 4. 写大文件
echo -e "\n开始给每个待测盘第一个分区写一个 10G 大文件, 请稍等片刻......\n"
for ffi in ${no_os_disk_part_li_jishu}
do
mount_point_dir="${mount_dir_prefix}/${ffi##*/}"
fallocate -l 10G "${mount_point_dir}/bigfile_10G"
jishu_part_file_arr["${ffi##*/}"]="${mount_point_dir}/bigfile_10G"
kkrint "Make 10G files of ${mount_point_dir}/bigfile_10G"
done
wait ; sleep 1
# 5. md5 计算
echo -e "\n开始计算 MD5 值, 请稍等片刻......\n"
for fs_name in "${jishu_part_file_arr[@]}"
do
echo "md5sum ${fs_name}"
md5sum ${fs_name}
echo
kkrint "Calculating MD5 values of ${fs_name}"
done > md5sum_record_${1}
fi
}
disk_symbol_li=$(lsblk -n -d -o 'NAME' | xargs)
disk_mkpart_write "before"
echo "获取所有奇数盘: ${no_os_disk_part_li_jishu[@]}"
echo "获取所有偶数盘: ${no_os_disk_part_li_oushu[@]}"
echo "所创建的所有大文件为: ${jishu_part_file_arr[@]}"