GPT分区相关的操作 ( 第二部分 )

GPT分区相关的操作 ( 第二部分 )

###############################################
这部分不要单独看. 要先看完第一部分再看这个.

!!!
再次提醒. 命令操作有风险 !!!
!!!

我要建两个分区. 再把gpt 的main和backup 同时清掉.
查找第一和第二个分区的位置.
再用parted重建出分区表. 让一切再恢复正常.

fdisk -l $dev

Disk /dev/vdb: 3 TiB, 3298534883328 bytes, 6442450944 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 3F180574-1456-8549-8263-270DAA0EC382

Device Start End Sectors Size Type
/dev/vdb1 2048 2147485695 2147483648 1T Linux filesystem
/dev/vdb2 2147485696 6442450910 4294965215 2T Linux swap

mkfs.ext4 /dev/vdb1

mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 268435456 4k blocks and 67108864 inodes
Filesystem UUID: 4fe6a416-71e6-4621-a8e1-a5e01e23a006

mkfs.xfs /dev/vdb2

Setting up swapspace version 1, size = 2 TiB (2199022182400 bytes)
no label, UUID=c0760463-afac-4798-90be-91446bc984bd

parted $dev

GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) unit
Unit? [compact]? s
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6442450944s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 2048s 2147485695s 2147483648s ext4
2 2147485696s 6442450910s 4294965215s linux-swap(v1)

###################### 清理掉.gpt main backup 数据.
dev="/dev/vdb"
#读出/proc/partitions里的块设备大小.计算共多少字节大.
#size= ( ( 3221225472 ∗ 1024 ) ) s e c t o r = ((3221225472*1024)) sector= ((32212254721024))sector=((3221225472*2))

dd if=/dev/zero of=$dev bs=512 count=34

dd if= d e v o f = f 2 f 33. s e c b s = 512 c o u n t = 33 s k i p = dev of=f2_f33.sec bs=512 count=33 skip= devof=f2f33.secbs=512count=33skip=(($sector-33))

gdisk $dev

GPT fdisk (gdisk) version 1.0.3

Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present

Creating new GPT entries.

Command (? for help): p
Disk /dev/vdb: 6442450944 sectors, 3.0 TiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 4F00BDF1-6BE3-48AF-A06F-28A620C9BED7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 6442450877 sectors (3.0 TiB)

Number Start (sector) End (sector) Size Code Name

Command (? for help):

###############################

cat find.sh

#!/bin/bash
start=0
stop=5000
len=10

SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs) = 1

Linux rev 1.0 ext4 filesystem = 2

Linux swap > 20

dev="/dev/vdb"

for i in $(seq $start $stop )
do

tmp= ( d d i f = (dd if= (ddif=dev bs=512 count= l e n s k i p = len skip= lenskip=i 2>/dev/null | file -)
d=$(echo t m p ∣ g r e p d a t a tmp|grep data tmpgrepdata|wc -l)
if [ $d -lt 1 ]
then
echo " $i — $tmp "
fi
done

./find.sh

2048 — /dev/stdin: Linux rev 1.0 ext4 filesystem data, UUID=4fe6a416-71e6-4621-a8e1-a5e01e23a006 (extents) (64bit) (large files) (huge files)

losetup -o $((512*2048)) /dev/loop1 $dev

root@ldap:/home/gpt# file -s /dev/loop1
/dev/loop1: Linux rev 1.0 ext4 filesystem data, UUID=4fe6a416-71e6-4621-a8e1-a5e01e23a006 (extents) (64bit) (large files) (huge files)
文件看起来都正常.

dumpe2fs -h /dev/loop1

dumpe2fs 1.44.5 (15-Dec-2018)
Filesystem volume name:
Last mounted on: /home/gpt/0
Filesystem UUID: 4fe6a416-71e6-4621-a8e1-a5e01e23a006
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex_bg sparse_super large_file huge_file dir_nlink extra_isize metadata_csum
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 67108864
Block count: 268435456
Reserved block count: 13421772
Free blocks: 263940708
Free inodes: 67108851
First block: 0
Block size: 4096
Fragment size: 4096
Group descriptor size: 64
Reserved GDT blocks: 1024
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
Flex block group size: 16
Filesystem created: Sun Oct 18 20:50:33 2020
Last mount time: Sun Oct 18 21:55:40 2020
Last write time: Sun Oct 18 21:55:54 2020
Mount count: 2
Maximum mount count: -1
Last checked: Sun Oct 18 20:50:33 2020
Check interval: 0 ()
Lifetime writes: 17 GB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 256
Required extra isize: 32
Desired extra isize: 32
Journal inode: 8
Default directory hash: half_md4
Directory Hash Seed: d759b7f2-e686-450f-92c2-6197d160748f
Journal backup: inode blocks
Checksum type: crc32c
Checksum: 0x6ff11364
Journal features: journal_64bit journal_checksum_v3
Journal size: 1024M
Journal length: 262144
Journal sequence: 0x00000108
Journal start: 0
Journal checksum type: crc32c
Journal checksum: 0x2e0b820a

=========
以下两个数相剩为 大约的 filesystem大小(字节为单位). 再除以512为扇区数.
Block size: 4096
Block count: 268435456
再加上之前第一个分区之前的部分. 2048扇区.

echo $((268435456*4096/512+2048))

2147485696

这个位置才是下一个分区可能出现的位置.

===========

cat find.sh

#!/bin/bash
#start=0
#stop=5000
len=10

SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs) = 1

Linux rev 1.0 ext4 filesystem = 2

Linux swap > 20

start=2147485696
stop=$((2147485696+5000))

dev="/dev/vdb"

for i in $(seq $start $stop )
do

tmp= ( d d i f = (dd if= (ddif=dev bs=512 count= l e n s k i p = len skip= lenskip=i 2>/dev/null | file -)
d=$(echo t m p ∣ g r e p d a t a tmp|grep data tmpgrepdata|wc -l)
if [ $d -lt 1 ]
then
echo " $i — $tmp "
fi
done

./find.sh

2147485696 — /dev/stdin: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

losetup -o $((512*2147485696)) /dev/loop2 $dev

file -s /dev/loop2

/dev/loop2: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

mount /dev/loop2 ./0

文件一切正常.

==================
看看能不能找到些数据. 计算出大小啥地.

xfs_info /dev/loop2

meta-data=/dev/loop2 isize=512 agcount=4, agsize=134217663 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=0
data = bsize=4096 blocks=536870651, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=262143, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0

我实在是不知道xfs是什么样的结构. 算来算去.下面这两个数相乘再除以512比实际 的大小 小一点点.
bsize=4096 blocks=536870651
先这么对付着. 往下走. 好在最后一个分区可以一直分到尾.应该不会出错.
要是后面还有分区. 就再找到下一个分区的头. 也许可以确定尾应该标到哪儿.
先不查了.相信又有N多细节…

#echo $((536870651*4096/512))
4294965208
#echo $((4294965208+2147485696))
6442450904 这个是大约的数.


如果可能. 我标这个数

echo ( ( (( ((sector-33-1))

6442450910

################## 下面试试能不能重建个分区表.
我们从查找的数据已经知道如下这些情况.
分区1 ext4 起2048 止2147485696-1 长度 2147483648
长度计算 echo $((2147485696-2048)) = 2147483648
分区2 xfs 起2147485696 止 6442450910 长度 4294965215
长度计算eco $((6442450910 +1 -2147485696)) 4294965215

和之前的数对比一下.
Number Start End Size File system Name Flags
1 2048s 2147485695s 2147483648s ext4
2 2147485696s 6442450910s 4294965215s linux-swap(V1)

相信我! 我已经迷糊了!!!

############## 我用parted重建一下分区表
root@ldap:/home/gpt# parted $dev
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type ‘help’ to view a list of commands.
(parted) mklabel
New disk label type? gpt

(parted) unit
Unit? [compact]? s

(parted) mkpart
Partition name? []? p1
File system type? [ext2]? ext4
Start? 2048
End? 2147485695

(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6442450944s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 2048s 2147485695s 2147483648s ext4 p1

(parted) mkpart
Partition name? []? p2
File system type? [ext2]? ext4
Start? 2147485696
End? 6442450910
(parted) p
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 6442450944s
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number Start End Size File system Name Flags
1 2048s 2147485695s 2147483648s ext4 p1
2 2147485696s 6442450910s 4294965215s ext4 p2

(parted) q
Information: You may need to update /etc/fstab.

partprobe

##########

file -s /dev/vdb1

/dev/vdb1: Linux rev 1.0 ext4 filesystem data, UUID=4fe6a416-71e6-4621-a8e1-a5e01e23a006 (extents) (64bit) (large files) (huge files)

file -s /dev/vdb2

/dev/vdb2: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)

mount操作一切正常.
希望出现这样的要求时. 我能正确操作吧…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值