-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathformat-a-disk.sh
101 lines (88 loc) · 1.85 KB
/
format-a-disk.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/sh
#
# SPDX-License-Identifier: CDDL-1.0
#
# {{{ CDDL HEADER
#
# This file and its contents are supplied under the terms of the
# Common Development and Distribution License ("CDDL"), version 1.0.
# You may only use this file in accordance with the terms of version
# 1.0 of the CDDL.
#
# A full copy of the text of the CDDL should have accompanied this
# source. A copy of the CDDL is also available via the Internet at
# http://www.illumos.org/license/CDDL.
#
# }}}
#
# Copyright 2024 Peter Tribble
#
#
# given a drive, partitions it with a single large slice 0
# optionally lays down a single fdisk partition
#
#
# we want two slices - 8, and 0, plus slice 2
#
TFILE=/tmp/prtvtoc-input.$$
OFILE=/tmp/prtvtoc-output.$$
case $# in
2)
BFLAG=$1
DISKDEV=$2
;;
1)
DISKDEV=$1
;;
*)
echo "Usage: $0 [-B] disk_device"
exit 1
;;
esac
case $DISKDEV in
/*)
printf ""
;;
*)
DISKDEV="/dev/rdsk/$DISKDEV"
;;
esac
case $DISKDEV in
*s2)
printf ""
;;
*)
DISKDEV="${DISKDEV}s2"
;;
esac
if [ ! -e "$DISKDEV" ]; then
echo "Error: unable to find disk device $DISKDEV"
exit 1
fi
#
# first partition using fdisk, if requested
#
case $BFLAG in
-B)
FDISKDEV=${DISKDEV%s2}p0
if [ ! -e "$FDISKDEV" ]; then
echo "Error: unable to find disk device $FDISKDEV"
exit 1
fi
echo "Allocating whole disk $FDISKDEV to Solaris"
/sbin/fdisk -B "$FDISKDEV"
;;
esac
/usr/sbin/prtvtoc "$DISKDEV" | /usr/bin/grep -v '^\*' > $TFILE
#
# need to find the start of slice 0, which is the size of slice 8
# then the end should be where slice 2 ends
#
START0=$(/usr/bin/awk '{ if ($1 == "8") print $5}' $TFILE)
END0=$(/usr/bin/awk '{ if ($1 == "2") print $6}' $TFILE)
SIZE0=$((END0-START0))
SIZE0=$((SIZE0+1))
echo "0 2 00 $START0 $SIZE0" > $OFILE
/usr/bin/awk '{ if ($1 == "8") print $1,$2,$3,$4,$5}' $TFILE >> $OFILE
/usr/sbin/fmthard -s $OFILE "$DISKDEV"
/usr/bin/rm -f $TFILE $OFILE