Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
system.linux
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Simple Deploy- and Management
system.linux
Commits
8ae6e417
Commit
8ae6e417
authored
5 years ago
by
Pietsch, Martin
Browse files
Options
Downloads
Patches
Plain Diff
update diskspreparation.sh script
parent
3bc8b34f
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
files/diskspreparation.sh
+220
-48
220 additions, 48 deletions
files/diskspreparation.sh
with
220 additions
and
48 deletions
files/diskspreparation.sh
+
220
−
48
View file @
8ae6e417
#!/usr/bin/env bash
export
DISK_SDA_SCHEME
=
"
msdos
"
export
DISK_SDA_SCHEME
=
"
gpt
"
declare
-a
DISK_SDA_PARTITIONS
=()
DISK_SDA_PARTITIONS+
=(
"1GB:fat
32
:/boot:defaults:0:0:False"
)
DISK_SDA_PARTITIONS+
=(
"12.5GB:ext4:/:defaults:0:0:True"
)
DISK_SDA_PARTITIONS+
=(
"1GB:fat
16
:/boot:defaults:0:0:False
:boot,esp
"
)
DISK_SDA_PARTITIONS+
=(
"12.5GB:ext4:/:defaults:0:0:True
:
"
)
export
DISK_SDA_PARTITIONS
export
DISK_SDB_SCHEME
=
"mbr"
declare
-a
DISK_SDB_PARTITIONS
=()
DISK_SDB_PARTITIONS+
=(
"12G
:
swap::defaults:0:0:true"
)
DISK_SDB_PARTITIONS+
=(
"12G
B:linux-
swap::defaults:0:0:true"
)
export
DISK_SDB_PARTITIONS
declare
-a
DISK_DEVICES
=(
"sda"
)
declare
-a
DISK_DEVICES
=(
"sda"
"sdb"
)
export
DISK_DEVICES
# convertSizeToByte - converts a given size to byte
...
...
@@ -23,43 +23,43 @@ convertSizeToByte() {
local
value
=
$(
echo
$1
|
sed
"s/[a-zA-Z%]*//g"
)
local factor
=
1
case
$
{
unit
}
in
"
B
"
)
factor
=
1
;;
"k
B
"
)
factor
=
1000
;;
"
MB
"
)
factor
=
1000000
;;
"
GB
"
)
factor
=
1000000000
;;
"
TB
"
)
factor
=
1000000000000
;;
"ki
B
"
)
factor
=
1024
;;
"
MiB
"
)
factor
=
1048576
;;
"
GiB
"
)
factor
=
1073741824
;;
"
TiB
"
)
factor
=
1099511627776
;;
case
$
(
echo
${
unit
}
|
tr
[
A-Z]
[
a-z]
)
in
"
b
"
)
factor
=
1
;;
"k
b
"
)
factor
=
1000
;;
"
mb
"
)
factor
=
1000000
;;
"
gb
"
)
factor
=
1000000000
;;
"
tb
"
)
factor
=
1000000000000
;;
"ki
b
"
)
factor
=
1024
;;
"
mib
"
)
factor
=
1048576
;;
"
gib
"
)
factor
=
1073741824
;;
"
tib
"
)
factor
=
1099511627776
;;
*
)
factor
=
1
;;
esac
res
=
$(
dc
-e
"0k
${
value
}
${
factor
}
* p"
)
echo
"
${
res
%.*
}
"
}
# convertByteToSize - converts a byte size to a given unit
# parameter:
# $1 - size in byte
# $2 - unit like "kB", "kiB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
# $2 - unit like
"B",
"kB", "kiB", "MB", "MiB", "GB", "GiB", "TB" or "TiB"
# return:
# rounded size with unit
convertByteToSize
()
{
local factor
=
1
case
$
2
in
"
B
"
)
factor
=
1
;;
"k
B
"
)
factor
=
1000
;;
"
MB
"
)
factor
=
1000000
;;
"
GB
"
)
factor
=
1000000000
;;
"
TB
"
)
factor
=
1000000000000
;;
"ki
B
"
)
factor
=
1024
;;
"
MiB
"
)
factor
=
1048576
;;
"
GiB
"
)
factor
=
1073741824
;;
"
TiB
"
)
factor
=
1099511627776
;;
case
$
(
echo
$2
|
tr
[
A-Z]
[
a-z]
)
in
"
b
"
)
factor
=
1
;;
"k
b
"
)
factor
=
1000
;;
"
mb
"
)
factor
=
1000000
;;
"
gb
"
)
factor
=
1000000000
;;
"
tb
"
)
factor
=
1000000000000
;;
"ki
b
"
)
factor
=
1024
;;
"
mib
"
)
factor
=
1048576
;;
"
gib
"
)
factor
=
1073741824
;;
"
tib
"
)
factor
=
1099511627776
;;
*
)
factor
=
1
;;
esac
...
...
@@ -71,13 +71,13 @@ convertByteToSize() {
# parameter:
# $1 - disk device name
# return:
# 0 - no
chang
es
# 1 -
label has changed
# 0 - no
differenc
es
# 1 -
current label differs from given label
validateScheme
()
{
local
lbl
=
$(
echo
$diskdata
[
0] |
cut
-f
6
-d
":"
)
local
lbl
=
$(
echo
$
{
diskdata
[0]
}
|
cut
-f
6
-d
":"
)
local
retval
=
1
local
scheme
=
$(
eval echo
\$
DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_SCHEME
)
if
[
"x
${
scheme
}
"
=
"x
${
lbl
}
"
]
;
then
retval
=
0
...
...
@@ -104,21 +104,21 @@ initialDiskScheme() {
return
}
# validateDiskPartition
s
- checks the partition
s
of a disk device
# validateDiskPartition
Layout
- checks the partition
layout
of a disk device
# parameter:
# $1 - disk device name
# return:
# 0 - no
chang
es
# 1 -
partions has changed
validateDiskPartition
s
()
{
# 0 - no
differenc
es
# 1 -
current partition layout differs from given partition layout
validateDiskPartition
Layout
()
{
declare
-a
parts
=()
local
retval
=
0
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
parts+
=(
${
part
}
)
done
if
[
${#
parts
[@]
}
-eq
$((${#
diskdata
[@]
}
-
1
))
]
;
then
for
idx
in
$(
seq
1 1
${#
parts
[@]
}
)
...
...
@@ -126,13 +126,13 @@ validateDiskPartitions() {
gsize
=
$(
convertSizeToByte
$(
echo
${
parts
[
$((${
idx
}
-
1
))
]
}
|
cut
-f
1
-d
":"
))
dsize
=
$(
convertSizeToByte
$(
echo
${
diskdata
[
${
idx
}
]
}
|
cut
-f
4
-d
":"
))
diffperc
=
$(
dc
-e
"2k
$dsize
$gsize
- 100 *
$gsize
/ p"
|
sed
-e
"s/^-//g"
)
if
[
-n
"x
${
diffperc
%.*
}
"
]
;
then
diffperc
=
0
fi
#if difference between current disk size and given disk size more than 1% then partition
s
has changed
#if difference between current disk size and given disk size more than 1% then
the
partition
layout
has changed
if
[
${
diffperc
%.*
}
-gt
1
]
;
then
retval
=
1
...
...
@@ -141,30 +141,195 @@ validateDiskPartitions() {
else
retval
=
1
fi
return
${
retval
}
}
# initialDiskPartition
s
- initial the partition
s
of a disk device
# initialDiskPartition
Layout
- initial the partition
layout
of a disk device
# parameter:
# $1 - disk device name
# return:
# none
initialDiskPartition
s
()
{
initialDiskPartition
Layout
()
{
declare
-a
parts
=()
local
scheme
=
$(
eval echo
\$
DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_SCHEME
)
local
start
=
$(
convertSizeToByte
"1MiB"
)
local
fs
=
""
local
size
=
""
local
end
=
""
local
idx
=
1
# create partitions
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
fs
=
$(
echo
${
part
}
|
cut
-f
2
-d
":"
)
fsize
=
$(
echo
${
part
}
|
cut
-f
1
-d
":"
)
size
=
$(
convertSizeToByte
$(
echo
${
part
}
|
cut
-f
1
-d
":"
))
end
=
$((${
start
}
+
${
size
}))
parted
-a
optimal
-s
-m
/dev/
$1
mkpart primary
${
fs
}
$(
convertByteToSize
${
start
}
"MiB"
)
$(
convertByteToSize
${
end
}
"MiB"
)
case
${
scheme
}
in
"mbr"
|
"msdos"
)
parted
-a
optimal
-s
-m
/dev/
$1
mkpart primary
${
fs
}
$(
convertByteToSize
${
start
}
"MiB"
)
$(
convertByteToSize
${
end
}
"MiB"
)
;;
"gpt"
)
parted
-a
optimal
-s
-m
/dev/
$1
mkpart
"Part
${
idx
}
"
${
fs
}
$(
convertByteToSize
${
start
}
"MiB"
)
$(
convertByteToSize
${
end
}
"MiB"
)
;;
esac
start
=
${
end
}
idx
=
$((
$idx
+
1
))
done
}
# setDiskPartitionFlags - set the flags of a disk partitions
# parameter:
# $1 - disk device name
# return:
# none
setDiskPartitionFlags
()
{
local
idx
local
flags
# reset all flags of every partition
for
part
in
$(
parted
-s
-m
/dev/
$1
print |
sed
-e
"1,2d;s/[
\
;]//g"
|
cut
-f
1,7
-d
":"
)
do
idx
=
$(
echo
${
part
}
|
cut
-f
1
-d
":"
)
for
flag
in
$(
echo
${
part
}
|
sed
"s/^[^:]*:
\(
.*
\)
$/
\1
/g;s/,/ /g"
)
do
parted
-s
/dev/
$1
set
${
idx
}
${
flag
}
off
done
done
# set all given flags of a partition
idx
=
1
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
flags
=
$(
echo
${
part
}
|
cut
-f
8
-d
":"
)
if
[
-n
"
${
flags
}
"
]
;
then
for
flag
in
$(
echo
${
flags
}
|
sed
"s/,/ /g"
)
do
parted
-s
/dev/
$1
set
${
idx
}
${
flag
}
on
done
fi
idx
=
$((
$idx
+
1
))
done
return
}
# formatDiskPartion - format a partition
# parameter:
# $1 - disk device name
# $2 - disk partition index
# $3 - filesystem name
# return:
# 0 - no error
# 1 - error occurred
# 2 - unknown filesystem
formatDiskPartion
()
{
local
device
=
"/dev/
$1$2
"
local
retval
=
0
case
$(
echo
$3
|
tr
"[A-Z]"
"[a-z]"
)
in
"ext4"
)
mkfs.ext4
-q
-F
${
device
}
>
/dev/null||
retval
=
1
;;
"ext3"
)
mkfs.ext3
-q
-F
${
device
}
>
/dev/null
||
retval
=
1
;;
"fat32"
)
mkfs.vfat
${
device
}
>
/dev/null
||
retval
=
1
;;
"fat16"
)
mkfs.msdos
-F
16
${
device
}
>
/dev/null
||
retval
=
1
;;
"swap"
)
mkswap
${
device
}
>
/dev/null
||
retval
=
1
;;
"ntfs"
)
mkntfs
-q
-f
${
device
}
>
/dev/null
||
retval
=
1
;;
"btrfs"
)
mkfs.btrfs
-q
-f
${
device
}
>
/dev/null
||
retval
=
1
;;
"reiserfs"
)
mkreiserfs
-q
${
device
}
>
/dev/null
||
retval
=
1
;;
*
)
retval
=
2
;;
esac
return
${
retval
}
}
# formatDiskPartitions - format partitions of a disk if necessary
# parameter:
# $1 - disk device name
# return:
# none
formatDiskPartitions
()
{
declare
-a
parts
=()
local
idx
local
gfs
local
dfs
local
format
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
$1
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
parts+
=(
${
part
}
)
done
for
part
in
$(
parted
-s
-m
/dev/
$1
print |
sed
-e
"1,2d;s/[
\
;]//g"
|
cut
-f
1,5
-d
":"
)
do
idx
=
$(
echo
${
part
}
|
cut
-f
1
-d
":"
)
dfs
=
$(
echo
${
part
}
|
cut
-f
2
-d
":"
)
gfs
=
$(
echo
${
parts
[
$((${
idx
}
-
1
))
]
}
|
cut
-f
2
-d
":"
)
format
=
$(
echo
${
parts
[
$((${
idx
}
-
1
))
]
}
|
cut
-f
7
-d
":"
|
tr
"[A-Z]"
"[a-z]"
)
if
[
"
${
dfs
}
"
!=
"
${
gfs
}
"
-o
"
${
format
}
"
=
"true"
]
;
then
formatDiskPartion
$1
${
idx
}
${
gfs
}
fi
done
}
# generateFSTab - generate an fstab file
# parameter:
# $1 - path of fstab file
# $2 - mount path prefix (optional)
# return:
# none
generateFSTab
()
{
local
idx
local
uuid
local
blkidout
local
mntpnt
local
mntpntpfx
=
""
local
fs
local
opts
local
dmp
local
pass
if
[
$#
-eq
2
]
;
then
mntpntpfx
=
"
$2
"
fi
echo
-e
"#device mount point filesystem options dump pass
\n
"
>
$1
for
disk
in
${
DISK_DEVICES
[@]
}
do
idx
=
1
for
part
in
$(
eval
"for p in
\$
{DISK_
$(
echo
${
disk
}
|
tr
[
a-z]
[
A-Z]
)
_PARTITIONS[@]}; do echo
\$
p; done "
)
do
blkidout
=
$(
blkid /dev/
${
disk
}${
idx
}
)
uuid
=
$(
echo
${
blkidout
}
|
sed
"s/^.*UUID=
\(
[^
\
]*
\)
.*
$/
\1
/g;s/
\"
//g"
)
fs
=
$(
echo
${
blkidout
}
|
sed
"s/^.*TYPE=
\(
[^
\
]*
\)
.*
$/
\1
/g;s/
\"
//g"
)
mntpnt
=
$(
echo
${
part
}
|
cut
-f
3
-d
":"
)
opts
=
$(
echo
${
part
}
|
cut
-f
4
-d
":"
)
dmp
=
$(
echo
${
part
}
|
cut
-f
5
-d
":"
)
pass
=
$(
echo
${
part
}
|
cut
-f
6
-d
":"
)
if
[
${
fs
}
=
"swap"
-o
${
fs
}
=
"linux-swap"
]
;
then
mntpnt
=
"none"
fi
if
[
-n
${
fs
}
-a
-n
${
mntpnt
}
-a
-n
${
uuid
}
]
;
then
echo
"#/dev/
${
disk
}${
idx
}
"
>>
$1
if
[
${
mntpnt
}
!=
"none"
]
;
then
echo
-e
"UUID=
${
uuid
}
${
mntpntpfx
}${
mntpnt
}
${
fs
}
${
opts
}
${
dmp
}
${
pass
}
\n
"
>>
$1
else
echo
-e
"UUID=
${
uuid
}
${
mntpnt
}
${
fs
}
${
opts
}
${
dmp
}
${
pass
}
\n
"
>>
$1
fi
fi
idx
=
$((${
idx
}
+
1
))
done
done
}
...
...
@@ -181,14 +346,21 @@ do
if
[
$?
-eq
0
]
;
then
validateDiskPartition
s
${
disk
}
validateDiskPartition
Layout
${
disk
}
if
[
$?
-ne
0
]
;
then
initialDiskPartition
s
${
disk
}
initialDiskPartition
Layout
${
disk
}
fi
else
initialDiskScheme
${
disk
}
initialDiskPartition
s
${
disk
}
initialDiskPartition
Layout
${
disk
}
fi
setDiskPartitionFlags
${
disk
}
formatDiskPartitions
${
disk
}
done
generateFSTab
"/tmp/fstab.local"
generateFSTab
"/tmp/fstab.target"
"/target"
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment