diff options
Diffstat (limited to 'src/initrd/btrfs-create.sh')
-rw-r--r-- | src/initrd/btrfs-create.sh | 61 |
1 files changed, 29 insertions, 32 deletions
diff --git a/src/initrd/btrfs-create.sh b/src/initrd/btrfs-create.sh index 9604340..c3cfcbb 100644 --- a/src/initrd/btrfs-create.sh +++ b/src/initrd/btrfs-create.sh | |||
@@ -71,13 +71,15 @@ losetup_layers() | |||
71 | done | 71 | done |
72 | elif [ -e /dev/disk/by-partlabel/samizdat-rootfs ] | 72 | elif [ -e /dev/disk/by-partlabel/samizdat-rootfs ] |
73 | then | 73 | then |
74 | local dev | 74 | # TODO: prevent raciness |
75 | for dev in samizdat-rootfs | 75 | umount /dev/disk/by-partlabel/samizdat-rootfs |
76 | do | 76 | if [ -e /dev/disk/by-partlabel/samizdat-patchfs ] |
77 | umount /dev/disk/by-partlabel/$dev | 77 | then |
78 | dd if=/dev/zero of=/$dev.rw bs=1M count=10 | 78 | umount /dev/disk/by-partlabel/samizdat-patchfs |
79 | dm_snapshot /dev/disk/by-partlabel/$dev /$dev.rw | 79 | mountdev=/dev/disk/by-partlabel/samizdat-patchfs |
80 | done | 80 | else |
81 | mountdev=/dev/disk/by-partlabel/samizdat-rootfs | ||
82 | fi | ||
81 | else | 83 | else |
82 | bootwait samizdat-nbd-dev | 84 | bootwait samizdat-nbd-dev |
83 | local dev | 85 | local dev |
@@ -93,20 +95,24 @@ init_samizdat() | |||
93 | { | 95 | { |
94 | local blockdev="$1" imgfile="$2" uuid | 96 | local blockdev="$1" imgfile="$2" uuid |
95 | 97 | ||
96 | losetup_layers || return | 98 | losetup_layers || return |
97 | modprobe btrfs || return | 99 | modprobe btrfs || return |
98 | btrfs device scan || return | 100 | btrfs device scan || return |
99 | 101 | ||
100 | uuid=$(choose_uuid) || return | 102 | if [ "$mountdev" ] |
101 | [ "$uuid" ] || return | 103 | then |
102 | 104 | mount -t btrfs "$mountdev" /root || return | |
103 | mount -t btrfs UUID="$uuid" /root || return | 105 | else |
106 | uuid=$(choose_uuid) || return | ||
107 | [ "$uuid" ] || return | ||
108 | mount -t btrfs UUID="$uuid" /root || return | ||
109 | fi | ||
104 | 110 | ||
105 | btrfs device add "$blockdev" /root || return | 111 | btrfs device add "$blockdev" /root || return |
106 | mount -o rw,remount /root || return | 112 | mount -o rw,remount /root || return |
107 | samizdat_movemounts "$imgfile" || return | 113 | samizdat_movemounts "$imgfile" || return |
108 | 114 | ||
109 | initialize_root_filesystem || return | 115 | initialize_root_filesystem || return |
110 | } | 116 | } |
111 | 117 | ||
112 | movemounts() | 118 | movemounts() |
@@ -248,24 +254,15 @@ filesystem_incomplete() | |||
248 | 254 | ||
249 | partition_new_hard_drive_DESTROYING_EVERYTHING() | 255 | partition_new_hard_drive_DESTROYING_EVERYTHING() |
250 | { | 256 | { |
251 | # TODO: get the actual size of the btrfs master and actually triple it. The empty | 257 | local target="$1" sz=2910 |
252 | # space can be left available to allow the local machine to boot a | ||
253 | # locally-regenerated rootfs seed. | ||
254 | sz=3 | ||
255 | u=GiB | ||
256 | actual_sz=$sz$u | ||
257 | tripled_sz=$((sz * 3))$u | ||
258 | pct=100% # TODO: use 50% | ||
259 | |||
260 | local target="$1" sz=6GiB | ||
261 | # [ "$(parted -sm "$target" print | grep -c :)" = 1 ] || return | 258 | # [ "$(parted -sm "$target" print | grep -c :)" = 1 ] || return |
262 | parted "$target" -sm \ | 259 | parted "$target" -sm \ |
263 | unit B \ | 260 | unit MiB \ |
264 | mklabel gpt \ | 261 | mklabel gpt \ |
265 | mkpart samizdat-grub-incomplete 32KiB 8MiB \ | 262 | mkpart samizdat-grub-incomplete 1 8 \ |
266 | set 1 bios_grub on \ | 263 | set 1 bios_grub on \ |
267 | mkpart samizdat-plaintext-incomplete btrfs 64MiB $actual_sz \ | 264 | mkpart samizdat-plaintext-incomplete btrfs 64 $((sz + 64)) \ |
268 | mkpart samizdat-luks-encrypted-incomplete $tripled_sz $pct \ | 265 | mkpart samizdat-luks-encrypted-incomplete $((sz + 64)) 100% \ |
269 | && | 266 | && |
270 | udevadm settle | 267 | udevadm settle |
271 | } | 268 | } |