sgdisk、parted磁盘分区和xfs文件系统修复
一、fdisk创建MBR分区,sgdisk创建GPT分区
gdisk软件包中包含sgdisk命令。 需要事先安装gdisk
Debian/Ubuntu: apt-get install gdisk RedHat/CentOS: yum install gdisk OpenSuSE: yast install gdis
1、新建分区
命令: sgdisk --help | grep new
帮助: -n, --new=partnum:start:end create new partition
-n 创建一个分区, -n后的参数分别是: 分区号:起始地址:终止地址
分区号为0:代表使用第一个可用的分区号;
起始地址和终止地址为0:0代表第一个可用地址和最后一个可用地址;
起始地址和终止地址可以为+/-xxx:代表偏移量,+代表在起始地址后的xxx地址,-代表在终止地址前的xxx地址;
①一块盘全部用于创建一个分区:
sgdisk -n 0:0:0 /dev/sdb
查看: lsblk | grep sdb
②创建一个从默认起始地址开始的10G的分区
sgdisk -n 2:0:+10G /dev/sdb
lsblk | grep sdb
③创建分区2,扇区从2048到10485760,type code为8300。
sgdisk -n 2:2048:10485760 -t 2:8300 -p /dev/sdb
例如一块盘创建4个分区
#sgdisk -n 1:0:+5 /dev/sdb Creating new GPT entries. The operation has completed successfully. #sgdisk -n 2:0:+5 /dev/sdb The operation has completed successfully. #sgdisk -n 3:0:+5 /dev/sdb The operation has completed successfully. #sgdisk -n 4:0:0 /dev/sdb The operation has completed successfully. #lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 44.2G 0 lvm / └─centos-swap 253:1 0 4.8G 0 lvm [SWAP] sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 2.5K 0 part ├─sdb2 8:18 0 2.5K 0 part ├─sdb3 8:19 0 2.5K 0 part └─sdb4 8:20 0 2.5K 0 part
2、查看分区详情
命令:sgdisk --help | grep info
帮助:-i, --info=partnum show detailed information on partition
-i 显示某个分区详情
①查看第一分区详情
sgdisk -i 1 /dev/sdb
sgdisk --info=1 /dev/sdb
②查看所有GPT分区
sgdisk -p /dev/sdb
3、修改分区的 type code
命令:sgdisk --help | grep typecode
帮助:-t, --typecode=partnum:{hexcode|GUID} change partition type code
-t 修改某个分区的type code
①指定第一分区的type code
命令:sgdisk -t 1:0FC63DAF-8483-4772-8E79-3D69D8477DE4 /dev/sdb
查看:sgdisk -i 1 /dev/sdb
4、修改分区名
命令:sgdisk --help | grep change-name
帮助:-c, --change-name=partnum:name change partition's name
-c 修改某个分区的分区名
①指定第一分区的分区名
sgdisk -c 1:"test data" /dev/sdb
查看:sgdisk -i 1 /dev/sdb
实例如下
# sgdisk -n 0:0:+5G -t 0:ef02 -c 0:grub /dev/sdb Creating new GPT entries. Setting name! partNum is 0 REALLY setting name! The operation has completed successfully. # sgdisk -n 0:0:+5G -t 0:ea00 -c 0:boot /dev/sdb # sgdisk -n 0:0:+2G -t 0:8200 -c 0:swap /dev/sdb # sgdisk -n 0:0:0 -t 0:8300 -c 0:root /dev/sdb #lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 20G 0 disk ├─sdb1 8:17 0 5G 0 part ├─sdb2 8:18 0 5G 0 part ├─sdb3 8:19 0 2G 0 part └─sdb4 8:20 0 8G 0 part #sgdisk -p /dev/sdb Disk /dev/sdb: 41943040 sectors, 20.0 GiB ...... Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 10487807 5.0 GiB EF02 grub 2 10487808 20973567 5.0 GiB EA00 boot 3 20973568 25167871 2.0 GiB 8200 swap 4 25167872 41943006 8.0 GiB 8300 root
5、清除分区数据
命令:sgdisk --help | grep zap
帮助:-z, --zap zap (destroy) GPT (but not MBR) data structures
①清除第一分区
sgdisk -z /dev/sdb1
6、删除分区
命令:sgdisk --help | grep delete
帮助:-d, --delete=partnum delete a partition
-d 删除一个分区
①删除第一分区
sgdisk --delete=1 /dev/sdb sgdisk -d 1 /dev/sdb lsblk | grep sdb
②删除所有分区
sgdisk --zap-all --clear --mbrtogpt /dev/sdb sgdisk --zap-all /dev/sdb
完整的操作流程
sgdisk --zap-all /dev/sdb sgdisk -n 0:0:0 --mbrtogpt -- /dev/sdb partprobe mkfs.xfs /dev/sdb1 mkfs.xfs /dev/sdc1 SDBUUID=$(blkid | grep -E '/dev/sdb1' | awk '{print $2}') SDCUUID=$(blkid | grep -E '/dev/sdc1' | awk '{print $2}') echo -e "${SDBUUID} /mnt/data xfs defaults 0 0" >> /etc/fstab echo -e "${SDCUUID} /mnt/ssd xfs defaults 0 0" >> /etc/fstab
注:--mbrtogpt 表示mbr分区转gpt分区
mkfs.xfs: cannot
open
/dev/sdb1: Device or resource busy 设备或资源忙
解决方法:
dmsetup ls datavg1-data1 (253:0) #然后我们移除这个占用 dmsetup remove datavg1-data1
7、生产环境中,一般会用sgdisk将磁盘的分区方案写入文件,备份存储。
sgdisk --backup=/root/sda.partitiontable /dev/sda sgdisk --backup=/root/sdb.partitiontable /dev/sdb
如果发生故障,可以使用sgdisk命令的--load-backup选项还原分区表。
从/dev/sda复制分区方案到/dev/sdb。
sgdisk -R /dev/sdb /dev/sda
新的硬盘上的GUID随机化,以确保它们是唯一的。
sgdisk -G /dev/sdb
检查两个硬盘驱动器现在是否具有相同的分区。
sgdisk -p /dev/sda sgdisk -p /dev/sdb
8、列出分区类型代码
#sgdisk --list-types 0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE 3000 ONIE boot 3001 ONIE config 4100 PowerPC PReP boot 4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS 7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved 8200 Linux swap 8300 Linux filesystem 8301 Linux reserved 8302 Linux /home 8400 Intel Rapid Start 8e00 Linux LVM a500 FreeBSD disklabel a501 FreeBSD boot a502 FreeBSD swap a503 FreeBSD UFS a504 FreeBSD ZFS a505 FreeBSD Vinum/RAID a580 Midnight BSD data a581 Midnight BSD boot a582 Midnight BSD swap a583 Midnight BSD UFS a584 Midnight BSD ZFS a585 Midnight BSD Vinum a800 Apple UFS a901 NetBSD swap a902 NetBSD FFS a903 NetBSD LFS a904 NetBSD concatenated a905 NetBSD encrypted a906 NetBSD RAID ab00 Apple boot af00 Apple HFS/HFS+ af01 Apple RAID af02 Apple RAID offline af03 Apple label af04 AppleTV recovery af05 Apple Core Storage be00 Solaris boot bf00 Solaris root bf01 Solaris /usr & Mac Z bf02 Solaris swap bf03 Solaris backup bf04 Solaris /var bf05 Solaris /home bf06 Solaris alternate se bf07 Solaris Reserved 1 bf08 Solaris Reserved 2 bf09 Solaris Reserved 3 bf0a Solaris Reserved 4 bf0b Solaris Reserved 5 c001 HP-UX data c002 HP-UX service ea00 Freedesktop $BOOT eb00 Haiku BFS ed00 Sony system partitio ed01 Lenovo system partit ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p fd00 Linux RAID
9、ceph中用sgdisk工具进行分区--------固定uuid
ceph通过uuid来区分你是osd分区还是journal分区之后,再决定数据放在哪里
ceph中创建journal分区和data分区:
sgdisk -n {part num}:0:+{part size}G {disk} -t {part num}:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -c {part num}:”ceph data”
sgdisk -n {part num}:0:+{part size}G {disk} -t {part num}:45b0969e-9b03-4f30-b4c6-b4b80ceff106 -c {part num}:”ceph journal”
root@host1:~# sgdisk -n 1:0:+20G /dev/nvme0n1 -t 1:45b0969e-9b03-4f30-b4c6-b4b80ceff106 -c 1:"ceph journal" Creating new GPT entries. The operation has completed successfully. root@host1:~# sgdisk -n 2:0:+20G /dev/nvme0n1 -t 2:45b0969e-9b03-4f30-b4c6-b4b80ceff106 -c 2:"ceph journal" The operation has completed successfully. root@host1:~# sgdisk -n 3:0:+150G /dev/nvme0n1 -t 3:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -c 3:"ceph data" The operation has completed successfully. root@host1:~# sgdisk -n 4:0:+150G /dev/nvme0n1 -t 4:4fbd7e29-9d25-41b8-afd0-062c0ceff05d -c 4:"ceph data" The operation has completed successfully. root@host1:~# ceph-disk list /dev/nvme0n1 : /dev/nvme0n1p1 ceph journal /dev/nvme0n1p2 ceph journal /dev/nvme0n1p3 ceph data, unprepared /dev/nvme0n1p4 ceph data, unprepared
10、格式化、挂载
# partprobe
将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表
格式化
mkfs.xfs /dev/sdb1 mkfs.xfs /dev/sdc1 #SDBUUID=$(blkid | grep -E '/dev/sdb1'| awk '{print $2}' |awk -F"\"" '{print $2}') #echo $SDBUUID 5ed06824-e1da-475f-9a15-9a89bc5fed30 #SDCUUID=$(blkid | grep -E '/dev/sdc1'| awk '{print $2}' |awk -F"\"" '{print $2}')
使用UUID挂载
echo -e "${SDBUUID} /mnt/data xfs defaults 0 0" >> /etc/fstab echo -e "${SDCUUID} /mnt/ssd xfs defaults 0 0" >> /etc/fstab
二、parted分区工具
1、安装
yum install parted
2、快速分区
disk=/dev/vdb && \ parted -s -a optimal $disk mklabel gpt -- mkpart primary ext4 1 -1
3、常规步骤
parted /dev/sdb //选择要分的硬盘 #(parted) mklabel gpt //类型GPT Warning: The existing disk labelon /dev/sdb will be destroyedand all dataon this disk will be lost. Do you want tocontinue? Yes/No? y//确定 #(parted) mkpart prinmary 1 -1 //将硬盘分成一个分区 #(parted) print //查看 #(parted) quit //退出Information: You may need to update /etc/fstab.
4、格式化
mkfs.xfs /dev/sdb1//格式化文件系统为ext4 或者 mkfs -t xfs /dev/md126p1
GPT(全局唯一标识磁盘分区表,适合UEFI下启动的系统)与 MBR(主引导记录,适合BIOS下启动的系统)不同,GPT只有主分区,没有逻辑分区
5、parted -l 查看分区信息
三、xfs文件系统修复方法
1、检查文件系统
做此步之前确保分区处于umount状态xfs_check /dev/sdd(盘符); echo $?
返回0表示正常
2、执行xfs_repair -n,检查文件系统是否损坏,如何损坏会列出将要执行的操作
执行xfs_repair -n,检查文件系统是否损坏,如何损坏会列出将要执行的操作
3、执行xfs_repair修复文件系统
xfs_repair /dev/sdd (ext系列工具为fsck): fsck -t ext4 -y /dev/sda1
4、损失部分数据的修复方法
根据打印消息,修复失败时,先执行
xfs_repair -L /dev/sdd(清空日志,会丢失文件)
再执行
xfs_repair /dev/sdd,再执行xfs_check /dev/sdd 检查文件系统是否修复成功。
说明:-L是修复xfs文件系统的最后手段,慎重选择,它会清空日志,会丢失用户数据和文件。
备注:在执行xfs_repair操作前,最好使用xfs_metadump工具保存元数据,一旦修复失败,最起码可以恢复到修复之前的状态。