Created
August 1, 2016 15:20
-
-
Save mzlumin/0460c2bcaf60979beab663866d7fc7f8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
LogPrint "Start system layout restoration." | |
mkdir -p /mnt/local | |
if create_component "vgchange" "rear" ; then | |
lvm vgchange -a n >&8 | |
component_created "vgchange" "rear" | |
fi | |
set -e | |
set -x | |
if create_component "/dev/sda" "disk" ; then | |
# Create /dev/sda (disk) | |
Log "Stop mdadm" | |
if grep -q md /proc/mdstat &>/dev/null; then | |
mdadm --stop -s >&2 || echo "stop mdadm failed" | |
# Prevent udev waking up mdadm later. | |
# Reasoning: At least on RHEL6 when parted created a raid partition on disk, | |
# udev (via /lib/udev/rules.d/65-md-incremental.rules) wakes up mdadm which locks the disk, | |
# so further parted commands with the disk will fail since the disk is busy now. | |
# The /lib/udev/rules.d/65-md-incremental.rules detects anaconda (the Red Hat installer), | |
# and if it find itself running under anaconda, it will not run. | |
# Accordingly also for other installers (in particular the rear installer) | |
# this rule should not be there (and other Linux distros probably do not have it) | |
# which means removing it is the right solution to make rear work also for RHEL6: | |
if [ -e /lib/udev/rules.d/65-md-incremental.rules ] ; then | |
rm -f /lib/udev/rules.d/65-md-incremental.rules || echo "rm 65-md-incremental.rules failed" | |
fi | |
fi | |
Log "Erasing MBR of disk /dev/sda" | |
dd if=/dev/zero of=/dev/sda bs=512 count=1 | |
sync | |
LogPrint "Creating partitions for disk /dev/sda (msdos)" | |
my_udevsettle | |
parted -s /dev/sda mklabel msdos >&2 | |
my_udevsettle | |
my_udevsettle | |
parted -s /dev/sda mkpart '"primary"' 2097152B 256901119B >&2 | |
my_udevsettle | |
my_udevsettle | |
parted -s /dev/sda set 1 boot on >&2 | |
my_udevsettle | |
my_udevsettle | |
parted -s /dev/sda mkpart '"primary"' 256905216B 256906314B >&2 | |
my_udevsettle | |
my_udevsettle | |
parted -s /dev/sda mkpart '"logical"' 256909312B 2147483647999B >&2 | |
my_udevsettle | |
my_udevsettle | |
parted -s /dev/sda set 5 lvm on >&2 | |
my_udevsettle | |
sleep 1 | |
if ! partprobe -s /dev/sda >&2 ; then | |
LogPrint 'retrying partprobe /dev/sda after 10 seconds' | |
sleep 10 | |
if ! partprobe -s /dev/sda >&2 ; then | |
LogPrint 'retrying partprobe /dev/sda after 1 minute' | |
sleep 60 | |
if ! partprobe -s /dev/sda >&2 ; then | |
LogPrint 'partprobe /dev/sda failed, proceeding bona fide' | |
fi | |
fi | |
fi | |
# Make sure device nodes are visible (eg. in RHEL4) | |
my_udevtrigger | |
my_udevsettle | |
component_created "/dev/sda" "disk" | |
else | |
LogPrint "Skipping /dev/sda (disk) as it has already been created." | |
fi | |
if create_component "/dev/sda1" "part" ; then | |
# Create /dev/sda1 (part) | |
component_created "/dev/sda1" "part" | |
else | |
LogPrint "Skipping /dev/sda1 (part) as it has already been created." | |
fi | |
if create_component "/dev/sda2" "part" ; then | |
# Create /dev/sda2 (part) | |
component_created "/dev/sda2" "part" | |
else | |
LogPrint "Skipping /dev/sda2 (part) as it has already been created." | |
fi | |
if create_component "/dev/sda5" "part" ; then | |
# Create /dev/sda5 (part) | |
component_created "/dev/sda5" "part" | |
else | |
LogPrint "Skipping /dev/sda5 (part) as it has already been created." | |
fi | |
if create_component "pv:/dev/sda5" "lvmdev" ; then | |
# Create pv:/dev/sda5 (lvmdev) | |
LogPrint "Creating LVM PV /dev/sda5" | |
lvm vgchange -a n Stark-vg || true | |
lvm pvcreate -ff --yes -v --uuid "ImZ231-KcF7-vIyB-5eB8-raak-HmG6-oKvx7t" --norestorefile /dev/sda5 >&2 | |
component_created "pv:/dev/sda5" "lvmdev" | |
else | |
LogPrint "Skipping pv:/dev/sda5 (lvmdev) as it has already been created." | |
fi | |
if create_component "/dev/Stark-vg" "lvmgrp" ; then | |
# Create /dev/Stark-vg (lvmgrp) | |
LogPrint "Creating LVM VG Stark-vg" | |
if [ -e "/dev/Stark-vg" ] ; then | |
rm -rf "/dev/Stark-vg" | |
fi | |
lvm vgcreate --physicalextentsize 4096k Stark-vg /dev/sda5 >&2 | |
lvm vgchange --available y Stark-vg >&2 | |
component_created "/dev/Stark-vg" "lvmgrp" | |
else | |
LogPrint "Skipping /dev/Stark-vg (lvmgrp) as it has already been created." | |
fi | |
if create_component "/dev/mapper/Stark--vg-root" "lvmvol" ; then | |
# Create /dev/mapper/Stark--vg-root (lvmvol) | |
LogPrint "Creating LVM volume Stark-vg/root" | |
lvm lvcreate -l 475887 -n root Stark-vg <<<y | |
component_created "/dev/mapper/Stark--vg-root" "lvmvol" | |
else | |
LogPrint "Skipping /dev/mapper/Stark--vg-root (lvmvol) as it has already been created." | |
fi | |
if create_component "/dev/mapper/Stark--vg-swap_1" "lvmvol" ; then | |
# Create /dev/mapper/Stark--vg-swap_1 (lvmvol) | |
LogPrint "Creating LVM volume Stark-vg/swap_1" | |
lvm lvcreate -l 983 -n swap_1 Stark-vg <<<y | |
component_created "/dev/mapper/Stark--vg-swap_1" "lvmvol" | |
else | |
LogPrint "Skipping /dev/mapper/Stark--vg-swap_1 (lvmvol) as it has already been created." | |
fi | |
if create_component "fs:/" "fs" ; then | |
# Create fs:/ (fs) | |
# Wait until udev had created '/dev/mapper/Stark--vg-root' before creating a filesystem there: | |
my_udevsettle | |
# Using wipefs to cleanup '/dev/mapper/Stark--vg-root' before creating filesystem. | |
LogPrint 'Creating filesystem of type 'ext4' with mount point '/' on '/dev/mapper/Stark--vg-root'.' | |
wipefs -a /dev/mapper/Stark--vg-root | |
# Try 'mkfs -U' to create the filesystem with initially correct UUID | |
# but if that fails assume it failed because of missing support for '-U' | |
# (e.g. in RHEL 5 it fails, see https://github.com/rear/rear/issues/890) | |
# then fall back to using mkfs without '-U' plus 'tune2fs/tune4fs -U' | |
if ! mkfs -t ext4 -b 4096 -i 16383 -U fc8f6cf5-34a6-4ccb-b89b-394b5348585c /dev/mapper/Stark--vg-root >&2 ; then | |
mkfs -t ext4 -b 4096 -i 16383 /dev/mapper/Stark--vg-root >&2 | |
tune2fs -U fc8f6cf5-34a6-4ccb-b89b-394b5348585c /dev/mapper/Stark--vg-root >&2 | |
fi | |
tune2fs -m 4 -c -1 -i 0d -o user_xattr,acl /dev/mapper/Stark--vg-root >&2 | |
LogPrint "Mounting filesystem /" | |
mkdir -p /mnt/local/ | |
mount -o rw,relatime,errors=remount-ro,data=ordered /dev/mapper/Stark--vg-root /mnt/local/ | |
component_created "fs:/" "fs" | |
else | |
LogPrint "Skipping fs:/ (fs) as it has already been created." | |
fi | |
if create_component "fs:/boot" "fs" ; then | |
# Create fs:/boot (fs) | |
# Wait until udev had created '/dev/sda1' before creating a filesystem there: | |
my_udevsettle | |
# Using wipefs to cleanup '/dev/sda1' before creating filesystem. | |
LogPrint 'Creating filesystem of type 'ext2' with mount point '/boot' on '/dev/sda1'.' | |
wipefs -a /dev/sda1 | |
# Try 'mkfs -U' to create the filesystem with initially correct UUID | |
# but if that fails assume it failed because of missing support for '-U' | |
# (e.g. in RHEL 5 it fails, see https://github.com/rear/rear/issues/890) | |
# then fall back to using mkfs without '-U' plus 'tune2fs/tune4fs -U' | |
if ! mkfs -t ext2 -b 1024 -i 4093 -U f2613fe4-3aa3-4926-bb9a-9fbbc9704be5 /dev/sda1 >&2 ; then | |
mkfs -t ext2 -b 1024 -i 4093 /dev/sda1 >&2 | |
tune2fs -U f2613fe4-3aa3-4926-bb9a-9fbbc9704be5 /dev/sda1 >&2 | |
fi | |
tune2fs -m 4 -c -1 -i 0d -o user_xattr,acl /dev/sda1 >&2 | |
LogPrint "Mounting filesystem /boot" | |
mkdir -p /mnt/local/boot | |
mount -o rw,relatime,stripe=4 /dev/sda1 /mnt/local/boot | |
component_created "fs:/boot" "fs" | |
else | |
LogPrint "Skipping fs:/boot (fs) as it has already been created." | |
fi | |
if create_component "swap:/dev/mapper/Stark--vg-swap_1" "swap" ; then | |
# Create swap:/dev/mapper/Stark--vg-swap_1 (swap) | |
LogPrint "Creating swap on /dev/mapper/Stark--vg-swap_1" | |
mkswap -U 33558643-e0f7-4f9e-8c22-6cab61abc2e0 /dev/mapper/Stark--vg-swap_1 >&2 | |
component_created "swap:/dev/mapper/Stark--vg-swap_1" "swap" | |
else | |
LogPrint "Skipping swap:/dev/mapper/Stark--vg-swap_1 (swap) as it has already been created." | |
fi | |
set +x | |
set +e | |
LogPrint "Disk layout created." |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment