Skip to content

Instantly share code, notes, and snippets.

@mzlumin
Created August 1, 2016 15:20
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mzlumin/0460c2bcaf60979beab663866d7fc7f8 to your computer and use it in GitHub Desktop.
Save mzlumin/0460c2bcaf60979beab663866d7fc7f8 to your computer and use it in GitHub Desktop.
#!/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