1cf200d32Sopenharmony_ci#!/bin/bash
2cf200d32Sopenharmony_ci# test gdisk and sgdisk by creating a dd file
3cf200d32Sopenharmony_ci# Copyright (C) 2011 Guillaume Delacour <gui@iroqwa.org>
4cf200d32Sopenharmony_ci#
5cf200d32Sopenharmony_ci# This program is free software; you can redistribute it and/or modify
6cf200d32Sopenharmony_ci# it under the terms of the GNU General Public License as published by
7cf200d32Sopenharmony_ci# the Free Software Foundation; either version 2 of the License, or
8cf200d32Sopenharmony_ci# (at your option) any later version.
9cf200d32Sopenharmony_ci#
10cf200d32Sopenharmony_ci# This program is distributed in the hope that it will be useful,
11cf200d32Sopenharmony_ci# but WITHOUT ANY WARRANTY; without even the implied warranty of
12cf200d32Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13cf200d32Sopenharmony_ci# GNU General Public License for more details.
14cf200d32Sopenharmony_ci#
15cf200d32Sopenharmony_ci# You should have received a copy of the GNU General Public License along
16cf200d32Sopenharmony_ci# with this program; if not, write to the Free Software Foundation, Inc.,
17cf200d32Sopenharmony_ci# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18cf200d32Sopenharmony_ci#
19cf200d32Sopenharmony_ci#
20cf200d32Sopenharmony_ci# Requires: coreutils (mktemp, dd) and 64M of disk space in /tmp (temp dd disk)
21cf200d32Sopenharmony_ci#
22cf200d32Sopenharmony_ci# This script test gdisk commands through the following scenario:
23cf200d32Sopenharmony_ci# - Initialize a new GPT table
24cf200d32Sopenharmony_ci# - Create a single Linux partition
25cf200d32Sopenharmony_ci# - Change name of partition
26cf200d32Sopenharmony_ci# - Change type of partition
27cf200d32Sopenharmony_ci# - Backup to file the GPT table
28cf200d32Sopenharmony_ci# - Delete the single partition
29cf200d32Sopenharmony_ci# - Restore from backup file the GPT table
30cf200d32Sopenharmony_ci# - Wipe the GPT table
31cf200d32Sopenharmony_ci
32cf200d32Sopenharmony_ci# TODO
33cf200d32Sopenharmony_ci# Try to generate a wrong GPT table to detect problems (test --verify)
34cf200d32Sopenharmony_ci# Create MBR partition table with fdisk and migrate it with gdisk
35cf200d32Sopenharmony_ci
36cf200d32Sopenharmony_ciGDISK_BIN=./gdisk
37cf200d32Sopenharmony_ciSGDISK_BIN=./sgdisk
38cf200d32Sopenharmony_ci
39cf200d32Sopenharmony_ciOPT_CLEAR="o"
40cf200d32Sopenharmony_ciOPT_NEW="n"
41cf200d32Sopenharmony_ciOPT_CHANGE_NAME="c"
42cf200d32Sopenharmony_ciOPT_CHANGE_TYPE="t"
43cf200d32Sopenharmony_ciOPT_BACKUP="b"
44cf200d32Sopenharmony_ciOPT_DELETE="d"
45cf200d32Sopenharmony_ciOPT_ZAP="z"
46cf200d32Sopenharmony_ci
47cf200d32Sopenharmony_ci# temp disk for testing gdisk
48cf200d32Sopenharmony_ciTEMP_DISK=$(mktemp)
49cf200d32Sopenharmony_ci# 64 MiB
50cf200d32Sopenharmony_ciTEMP_DISK_SIZE=65536
51cf200d32Sopenharmony_ci
52cf200d32Sopenharmony_ci# the test partition to create
53cf200d32Sopenharmony_ciTEST_PART_TYPE="8300"
54cf200d32Sopenharmony_ciTEST_PART_DEFAULT_NAME="Linux filesystem"
55cf200d32Sopenharmony_ci
56cf200d32Sopenharmony_ci# newname for the partition
57cf200d32Sopenharmony_ciTEST_PART_NEWNAME=$(tr -dc "[:alpha:]" < /dev/urandom | head -c 8)
58cf200d32Sopenharmony_ci# and new type (swap for example)
59cf200d32Sopenharmony_ciTEST_PART_NEWTYPE="8200"
60cf200d32Sopenharmony_ci
61cf200d32Sopenharmony_ci# GPT data backup to filename
62cf200d32Sopenharmony_ciGPT_BACKUP_FILENAME=$(mktemp)
63cf200d32Sopenharmony_ci
64cf200d32Sopenharmony_ci# Pretty print string (Red if FAILED or green if SUCCESS)
65cf200d32Sopenharmony_ci# $1: string to pretty print
66cf200d32Sopenharmony_cipretty_print() {
67cf200d32Sopenharmony_ci	if [ "$1" = "SUCCESS" ]
68cf200d32Sopenharmony_ci	then
69cf200d32Sopenharmony_ci		# green
70cf200d32Sopenharmony_ci		color="32"
71cf200d32Sopenharmony_ci	else
72cf200d32Sopenharmony_ci		# red
73cf200d32Sopenharmony_ci		color="31"
74cf200d32Sopenharmony_ci	fi
75cf200d32Sopenharmony_ci
76cf200d32Sopenharmony_ci	printf "\033[0;${color}m**$1**\033[m $2\n"
77cf200d32Sopenharmony_ci}
78cf200d32Sopenharmony_ci
79cf200d32Sopenharmony_ci# Verify that the partition exist and has the given type/name
80cf200d32Sopenharmony_ci# $1: Partition type to verify (ex.: 8300)
81cf200d32Sopenharmony_ci# $2: Partition name to verify (ex.: Linux filesystem)
82cf200d32Sopenharmony_ci# $3: Text to print
83cf200d32Sopenharmony_civerify_part() {
84cf200d32Sopenharmony_ci	partition=$($GDISK_BIN -l $TEMP_DISK | tail -n 1)
85cf200d32Sopenharmony_ci	echo $partition | grep -q "$1[[:space:]]$2$"
86cf200d32Sopenharmony_ci
87cf200d32Sopenharmony_ci	if [ $? -eq 0 ]
88cf200d32Sopenharmony_ci	then
89cf200d32Sopenharmony_ci		pretty_print "SUCCESS" "$3"
90cf200d32Sopenharmony_ci	else
91cf200d32Sopenharmony_ci		pretty_print "FAILED" "$3"
92cf200d32Sopenharmony_ci		exit 1
93cf200d32Sopenharmony_ci	fi
94cf200d32Sopenharmony_ci}
95cf200d32Sopenharmony_ci
96cf200d32Sopenharmony_ci
97cf200d32Sopenharmony_ci#####################################
98cf200d32Sopenharmony_ci# Get GUID of disk
99cf200d32Sopenharmony_ci#####################################
100cf200d32Sopenharmony_ciget_diskguid() {
101cf200d32Sopenharmony_ci	DISK_GUID=$($GDISK_BIN -l $TEMP_DISK | grep "^Disk identifier (GUID):" | awk '{print $4}')
102cf200d32Sopenharmony_ci	return $DISK_GUID
103cf200d32Sopenharmony_ci}
104cf200d32Sopenharmony_ci
105cf200d32Sopenharmony_ci
106cf200d32Sopenharmony_ci#####################################
107cf200d32Sopenharmony_ci# Create a new empty table
108cf200d32Sopenharmony_ci#####################################
109cf200d32Sopenharmony_cicreate_table() {
110cf200d32Sopenharmony_ci	case $1 in
111cf200d32Sopenharmony_ci		gdisk)
112cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
113cf200d32Sopenharmony_ci$OPT_CLEAR
114cf200d32Sopenharmony_ciY
115cf200d32Sopenharmony_ciw
116cf200d32Sopenharmony_ciY
117cf200d32Sopenharmony_ciEOF
118cf200d32Sopenharmony_ci
119cf200d32Sopenharmony_ci			ret=$?
120cf200d32Sopenharmony_ci			if [ $ret -ne 0 ]
121cf200d32Sopenharmony_ci			then
122cf200d32Sopenharmony_ci				pretty_print "FAILED" "gdisk return $ret when creating partition table"
123cf200d32Sopenharmony_ci				exit 1
124cf200d32Sopenharmony_ci			fi
125cf200d32Sopenharmony_ci		;;
126cf200d32Sopenharmony_ci		sgdisk)
127cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_CLEAR}
128cf200d32Sopenharmony_ci
129cf200d32Sopenharmony_ci			ret=$?
130cf200d32Sopenharmony_ci			if [ $ret -ne 0 ]
131cf200d32Sopenharmony_ci			then
132cf200d32Sopenharmony_ci				pretty_print "FAILED" "sgdisk return $ret when creating partition table"
133cf200d32Sopenharmony_ci				exit 1
134cf200d32Sopenharmony_ci			fi
135cf200d32Sopenharmony_ci		;;
136cf200d32Sopenharmony_ci	esac
137cf200d32Sopenharmony_ci
138cf200d32Sopenharmony_ci	# verify that the table is empty
139cf200d32Sopenharmony_ci	# only the columns should appear in the table
140cf200d32Sopenharmony_ci	verify_part "Code" "Name" "Create new empty GPT table"
141cf200d32Sopenharmony_ci	echo ""
142cf200d32Sopenharmony_ci}
143cf200d32Sopenharmony_ci
144cf200d32Sopenharmony_ci
145cf200d32Sopenharmony_ci
146cf200d32Sopenharmony_ci#####################################
147cf200d32Sopenharmony_ci# First create a new partition
148cf200d32Sopenharmony_ci#####################################
149cf200d32Sopenharmony_cicreate_partition() {
150cf200d32Sopenharmony_ci	case $1 in
151cf200d32Sopenharmony_ci		gdisk)
152cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
153cf200d32Sopenharmony_ci$OPT_NEW
154cf200d32Sopenharmony_ci1
155cf200d32Sopenharmony_ci
156cf200d32Sopenharmony_ci
157cf200d32Sopenharmony_ci$TEST_PART_TYPE
158cf200d32Sopenharmony_ciw
159cf200d32Sopenharmony_ciY
160cf200d32Sopenharmony_ciEOF
161cf200d32Sopenharmony_ci		;;
162cf200d32Sopenharmony_ci
163cf200d32Sopenharmony_ci		sgdisk)
164cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_NEW} 1 -${OPT_CHANGE_NAME} 1:"${TEST_PART_DEFAULT_NAME}" -${OPT_CHANGE_TYPE} 1:$TEST_PART_TYPE
165cf200d32Sopenharmony_ci		;;
166cf200d32Sopenharmony_ci	esac
167cf200d32Sopenharmony_ci
168cf200d32Sopenharmony_ci	verify_part "$TEST_PART_TYPE" "$TEST_PART_DEFAULT_NAME" "Create new partition"
169cf200d32Sopenharmony_ci	echo ""
170cf200d32Sopenharmony_ci}
171cf200d32Sopenharmony_ci
172cf200d32Sopenharmony_ci
173cf200d32Sopenharmony_ci#####################################
174cf200d32Sopenharmony_ci# Change name of partition
175cf200d32Sopenharmony_ci#####################################
176cf200d32Sopenharmony_cichange_partition_name() {
177cf200d32Sopenharmony_ci	case $1 in
178cf200d32Sopenharmony_ci		gdisk)
179cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
180cf200d32Sopenharmony_ci$OPT_CHANGE_NAME
181cf200d32Sopenharmony_ci$TEST_PART_NEWNAME
182cf200d32Sopenharmony_ciw
183cf200d32Sopenharmony_ciY
184cf200d32Sopenharmony_ciEOF
185cf200d32Sopenharmony_ci		;;
186cf200d32Sopenharmony_ci
187cf200d32Sopenharmony_ci		sgdisk)
188cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_CHANGE_NAME} 1:${TEST_PART_NEWNAME}
189cf200d32Sopenharmony_ci		;;
190cf200d32Sopenharmony_ci	esac
191cf200d32Sopenharmony_ci
192cf200d32Sopenharmony_ci	verify_part "$TEST_PART_TYPE" "$TEST_PART_NEWNAME" "Change partition 1 name ($TEST_PART_DEFAULT_NAME -> $TEST_PART_NEWNAME)"
193cf200d32Sopenharmony_ci	echo ""
194cf200d32Sopenharmony_ci}
195cf200d32Sopenharmony_ci
196cf200d32Sopenharmony_ci
197cf200d32Sopenharmony_cichange_partition_type() {
198cf200d32Sopenharmony_ci#####################################
199cf200d32Sopenharmony_ci# Change type of partition
200cf200d32Sopenharmony_ci#####################################
201cf200d32Sopenharmony_ci	case $1 in
202cf200d32Sopenharmony_ci		gdisk)
203cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
204cf200d32Sopenharmony_ci$OPT_CHANGE_TYPE
205cf200d32Sopenharmony_ci$TEST_PART_NEWTYPE
206cf200d32Sopenharmony_ciw
207cf200d32Sopenharmony_ciY
208cf200d32Sopenharmony_ciEOF
209cf200d32Sopenharmony_ci		;;
210cf200d32Sopenharmony_ci
211cf200d32Sopenharmony_ci		sgdisk)
212cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_CHANGE_TYPE} 1:${TEST_PART_NEWTYPE}
213cf200d32Sopenharmony_ci		;;
214cf200d32Sopenharmony_ci	esac
215cf200d32Sopenharmony_ci
216cf200d32Sopenharmony_ci	verify_part "$TEST_PART_NEWTYPE" "$TEST_PART_NEWNAME" "Change partition 1 type ($TEST_PART_TYPE -> $TEST_PART_NEWTYPE)"
217cf200d32Sopenharmony_ci	echo ""
218cf200d32Sopenharmony_ci}
219cf200d32Sopenharmony_ci
220cf200d32Sopenharmony_ci
221cf200d32Sopenharmony_ci#####################################
222cf200d32Sopenharmony_ci# Backup GPT data to file
223cf200d32Sopenharmony_ci#####################################
224cf200d32Sopenharmony_cibackup_table() {
225cf200d32Sopenharmony_ci	case $1 in
226cf200d32Sopenharmony_ci		gdisk)
227cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
228cf200d32Sopenharmony_ci$OPT_BACKUP
229cf200d32Sopenharmony_ci$GPT_BACKUP_FILENAME
230cf200d32Sopenharmony_ciq
231cf200d32Sopenharmony_ciEOF
232cf200d32Sopenharmony_ciecho ""
233cf200d32Sopenharmony_ci		;;
234cf200d32Sopenharmony_ci
235cf200d32Sopenharmony_ci		sgdisk)
236cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_BACKUP} ${GPT_BACKUP_FILENAME}
237cf200d32Sopenharmony_ci		;;
238cf200d32Sopenharmony_ci	esac
239cf200d32Sopenharmony_ci
240cf200d32Sopenharmony_ci	# if exist and not empty; we will test it after
241cf200d32Sopenharmony_ci	if [ -s $GPT_BACKUP_FILENAME ]
242cf200d32Sopenharmony_ci	then
243cf200d32Sopenharmony_ci		pretty_print "SUCCESS" "GPT data backuped sucessfully"
244cf200d32Sopenharmony_ci	else
245cf200d32Sopenharmony_ci		pretty_print "FAILED" "Unable to create GPT backup file !"
246cf200d32Sopenharmony_ci		exit 1
247cf200d32Sopenharmony_ci	fi
248cf200d32Sopenharmony_ci}
249cf200d32Sopenharmony_ci
250cf200d32Sopenharmony_ci
251cf200d32Sopenharmony_ci#####################################
252cf200d32Sopenharmony_ci# Now, we can delete the partition
253cf200d32Sopenharmony_ci#####################################
254cf200d32Sopenharmony_cidelete_partition() {
255cf200d32Sopenharmony_ci	case $1 in
256cf200d32Sopenharmony_ci		gdisk)
257cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
258cf200d32Sopenharmony_ci$OPT_DELETE
259cf200d32Sopenharmony_ciw
260cf200d32Sopenharmony_ciY
261cf200d32Sopenharmony_ciEOF
262cf200d32Sopenharmony_ci		;;
263cf200d32Sopenharmony_ci
264cf200d32Sopenharmony_ci		sgdisk)
265cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_DELETE} 1
266cf200d32Sopenharmony_ci		;;
267cf200d32Sopenharmony_ci	esac
268cf200d32Sopenharmony_ci
269cf200d32Sopenharmony_ci	# verify that the table is empty (just one partition):
270cf200d32Sopenharmony_ci	# only the columns should appear in the table
271cf200d32Sopenharmony_ci	verify_part "Code" "Name" "Delete partition 1"
272cf200d32Sopenharmony_ci	echo ""
273cf200d32Sopenharmony_ci}
274cf200d32Sopenharmony_ci
275cf200d32Sopenharmony_ci
276cf200d32Sopenharmony_ci#####################################
277cf200d32Sopenharmony_ci# Restore GPT table
278cf200d32Sopenharmony_ci#####################################
279cf200d32Sopenharmony_cirestore_table() {
280cf200d32Sopenharmony_ci	$GDISK_BIN $TEMP_DISK << EOF
281cf200d32Sopenharmony_cir
282cf200d32Sopenharmony_cir
283cf200d32Sopenharmony_cil
284cf200d32Sopenharmony_ci$GPT_BACKUP_FILENAME
285cf200d32Sopenharmony_ciw
286cf200d32Sopenharmony_ciY
287cf200d32Sopenharmony_ciEOF
288cf200d32Sopenharmony_ci
289cf200d32Sopenharmony_ci	verify_part "$TEST_PART_NEWTYPE" "$TEST_PART_NEWNAME" "Restore the GPT backup"
290cf200d32Sopenharmony_ci	echo ""
291cf200d32Sopenharmony_ci}
292cf200d32Sopenharmony_ci
293cf200d32Sopenharmony_ci
294cf200d32Sopenharmony_ci#####################################
295cf200d32Sopenharmony_ci# Change UID of disk
296cf200d32Sopenharmony_ci#####################################
297cf200d32Sopenharmony_cichange_disk_uid() {
298cf200d32Sopenharmony_ci
299cf200d32Sopenharmony_ci	# get UID of disk before changing it
300cf200d32Sopenharmony_ci	GUID=get_diskguid
301cf200d32Sopenharmony_ci
302cf200d32Sopenharmony_ci
303cf200d32Sopenharmony_ci	case $1 in
304cf200d32Sopenharmony_ci		gdisk)
305cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
306cf200d32Sopenharmony_cix
307cf200d32Sopenharmony_cig
308cf200d32Sopenharmony_ciR
309cf200d32Sopenharmony_ciw
310cf200d32Sopenharmony_ciY
311cf200d32Sopenharmony_ciEOF
312cf200d32Sopenharmony_ci		;;
313cf200d32Sopenharmony_ci
314cf200d32Sopenharmony_ci		sgdisk)
315cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -U=R
316cf200d32Sopenharmony_ci		;;
317cf200d32Sopenharmony_ci	esac
318cf200d32Sopenharmony_ci
319cf200d32Sopenharmony_ci	# get GUID after change
320cf200d32Sopenharmony_ci	NEW_DISK_GUID=get_diskguid
321cf200d32Sopenharmony_ci
322cf200d32Sopenharmony_ci	# compare them
323cf200d32Sopenharmony_ci	if [ "$DISK_GUID" != "$NEW_DISK_GUID" ]
324cf200d32Sopenharmony_ci	then
325cf200d32Sopenharmony_ci		pretty_print "SUCCESS" "GUID of disk has been sucessfully changed"
326cf200d32Sopenharmony_ci	else
327cf200d32Sopenharmony_ci		pretty_print "FAILED" "GUID of disk is the same as the previous one"
328cf200d32Sopenharmony_ci		exit 1
329cf200d32Sopenharmony_ci	fi
330cf200d32Sopenharmony_ci}
331cf200d32Sopenharmony_ci
332cf200d32Sopenharmony_ci#####################################
333cf200d32Sopenharmony_ci# Wipe GPT table
334cf200d32Sopenharmony_ci#####################################
335cf200d32Sopenharmony_ciwipe_table() {
336cf200d32Sopenharmony_ci	case $1 in
337cf200d32Sopenharmony_ci		gdisk)
338cf200d32Sopenharmony_ci			$GDISK_BIN $TEMP_DISK << EOF
339cf200d32Sopenharmony_cix
340cf200d32Sopenharmony_ci$OPT_ZAP
341cf200d32Sopenharmony_ciY
342cf200d32Sopenharmony_ciY
343cf200d32Sopenharmony_ciEOF
344cf200d32Sopenharmony_ci		;;
345cf200d32Sopenharmony_ci
346cf200d32Sopenharmony_ci		sgdisk)
347cf200d32Sopenharmony_ci			$SGDISK_BIN $TEMP_DISK -${OPT_ZAP}
348cf200d32Sopenharmony_ci	esac
349cf200d32Sopenharmony_ci
350cf200d32Sopenharmony_ci	# verify that the table is empty (just one partition):
351cf200d32Sopenharmony_ci	# only the columns should appear in the table
352cf200d32Sopenharmony_ci	verify_part "Code" "Name" "Wipe GPT table"
353cf200d32Sopenharmony_ci	echo ""
354cf200d32Sopenharmony_ci}
355cf200d32Sopenharmony_ci
356cf200d32Sopenharmony_ci#####################################
357cf200d32Sopenharmony_ci# Test stdin EOF
358cf200d32Sopenharmony_ci#####################################
359cf200d32Sopenharmony_cieof_stdin() {
360cf200d32Sopenharmony_ci	$SGDISK_BIN $TEMP_DISK << EOF
361cf200d32Sopenharmony_ci^D
362cf200d32Sopenharmony_ciEOF
363cf200d32Sopenharmony_ci	pretty_print "SUCCESS" "EOF successfully exit gdisk"
364cf200d32Sopenharmony_ci}
365cf200d32Sopenharmony_ci
366cf200d32Sopenharmony_ci###################################
367cf200d32Sopenharmony_ci# Main
368cf200d32Sopenharmony_ci###################################
369cf200d32Sopenharmony_ci
370cf200d32Sopenharmony_ci# create a file to simulate a real device
371cf200d32Sopenharmony_cidd if=/dev/zero of=$TEMP_DISK bs=1024 count=$TEMP_DISK_SIZE > /dev/null 2>&1
372cf200d32Sopenharmony_ci
373cf200d32Sopenharmony_ciif [ -s $TEMP_DISK ]
374cf200d32Sopenharmony_cithen
375cf200d32Sopenharmony_ci	pretty_print "SUCCESS" "Temp disk sucessfully created"
376cf200d32Sopenharmony_cielse
377cf200d32Sopenharmony_ci	pretty_print "FAILED" "Unable to create temp disk !"
378cf200d32Sopenharmony_ci	exit 1
379cf200d32Sopenharmony_cifi
380cf200d32Sopenharmony_ci
381cf200d32Sopenharmony_ci# test gdisk and sgdisk
382cf200d32Sopenharmony_cifor binary in gdisk sgdisk
383cf200d32Sopenharmony_cido
384cf200d32Sopenharmony_ci	echo ""
385cf200d32Sopenharmony_ci	printf "\033[0;34m**Testing $binary binary**\033[m\n"
386cf200d32Sopenharmony_ci	echo ""
387cf200d32Sopenharmony_ci	create_table          "$binary"
388cf200d32Sopenharmony_ci	create_partition      "$binary"
389cf200d32Sopenharmony_ci	change_partition_name "$binary"
390cf200d32Sopenharmony_ci	change_partition_type "$binary"
391cf200d32Sopenharmony_ci	backup_table          "$binary"
392cf200d32Sopenharmony_ci	delete_partition      "$binary"
393cf200d32Sopenharmony_ci	restore_table         # only with gdisk
394cf200d32Sopenharmony_ci	change_disk_uid       "$binary"
395cf200d32Sopenharmony_ci	wipe_table            "$binary"
396cf200d32Sopenharmony_ci	eof_stdin             # only with gdisk
397cf200d32Sopenharmony_cidone
398cf200d32Sopenharmony_ci
399cf200d32Sopenharmony_ci# remove temp files
400cf200d32Sopenharmony_cirm -f $TEMP_DISK $GPT_BACKUP_FILENAME
401cf200d32Sopenharmony_ci
402cf200d32Sopenharmony_ciexit 0
403