summaryrefslogtreecommitdiffstats
path: root/tests/gpt-header-move
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:16:34 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:16:34 +0000
commita398d2c2b5fd6ab0545d8bb019f9a970b2309404 (patch)
tree272fc7ab226258d7ceddee12c8c682c8e711c2b0 /tests/gpt-header-move
parentInitial commit. (diff)
downloadparted-upstream.tar.xz
parted-upstream.zip
Adding upstream version 3.6.upstream/3.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rwxr-xr-xtests/gpt-header-move42
1 files changed, 42 insertions, 0 deletions
diff --git a/tests/gpt-header-move b/tests/gpt-header-move
new file mode 100755
index 0000000..18f58d0
--- /dev/null
+++ b/tests/gpt-header-move
@@ -0,0 +1,42 @@
+#!/usr/bin/python3
+
+# open img file, subtract 33 from altlba address, and move the last 33 sectors
+# back by 33 sectors
+
+from struct import unpack_from, pack_into
+from zipfile import crc32
+import array
+import sys
+
+file = open(sys.argv[1],'rb+')
+file.seek(512)
+gptheader = file.read(512)
+altlba = unpack_from('<q', gptheader, offset=32)[0]
+gptheader = array.array('B', gptheader)
+pack_into('<Q', gptheader, 32, altlba-33)
+#zero header crc
+pack_into('<L', gptheader, 16, 0)
+#compute new crc
+newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+pack_into('<L', gptheader, 16, newcrc)
+file.seek(512)
+file.write(gptheader)
+file.seek(512*altlba)
+gptheader = file.read(512)
+file.seek(512*(altlba-32))
+backup = file.read(512*32)
+altlba -= 33
+gptheader = array.array('B',gptheader)
+#update mylba
+pack_into('<Q', gptheader, 24, altlba)
+#update table lba
+pack_into('<Q', gptheader, 72, altlba-32)
+#zero header crc
+pack_into('<L', gptheader, 16, 0)
+#compute new crc
+newcrc = ((crc32(gptheader[:92])) & 0xFFFFFFFF)
+pack_into('<L', gptheader, 16, newcrc)
+file.seek(512*(altlba-32))
+file.write(backup)
+file.write(gptheader)
+file.write(b"\0" * (512 * 33))