-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathremoveDiskInAnRAID5.sh
More file actions
executable file
·158 lines (126 loc) · 4.38 KB
/
Copy pathremoveDiskInAnRAID5.sh
File metadata and controls
executable file
·158 lines (126 loc) · 4.38 KB
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#!/bin/bash
# POC to verify it's possible to remove a disk from a RAID5 and not to force a RAID rebuild to prove it will work on a pure Linux.
# Given I have no spare synology NAS to test this on DSM that's how I verified it may work also on a Synology running DSM.
#
# Setup: Three devices with 3 partitions. md0 and md1 use partitions 1 and 2 as a RAID1. Partition3 is used in a RAID5.
#
# Steps:
# 1) Create the RAIDs
# 2) Create files in the RAIDs
# 3) Deactivate the RAID5
# ... remove disk /dev/sda ... and insert it again
# 4) Add the removed disk again to all RAIDs
# ... The two RAID1s are rebuilt because they were active when the disk was removed. The RAID5 is active immediately without any rebuild
#
# POC created by framp@linux-tips-and-tricks.de
case $1 in
createRaid | 1)
echo "*** Removing mdadm config"
rm /etc/mdadm/mdadm.conf
echo
echo "*** Umounting RAIDs"
umount /dev/md0
umount /dev/md1
umount /dev/md2
echo
echo "*** Wipe RAID partition"
umount /dev/md0
sudo wipefs --all --force /dev/md0
umount /dev/md1
sudo wipefs --all --force /dev/md1
umount /dev/md2
sudo wipefs --all --force /dev/md2
echo
echo "*** Stopping RAIDs"
mdadm --stop /dev/md0
mdadm --stop /dev/md1
mdadm --stop /dev/md2
echo
echo "*** Wipe partitions"
umount /dev/sda?
sudo wipefs --all --force /dev/sda?
sudo wipefs --all --force /dev/sda
umount /dev/sdb?
sudo wipefs --all --force /dev/sdb?
sudo wipefs --all --force /dev/sdb
umount /dev/sdc?
sudo wipefs --all --force /dev/sdc?
sudo wipefs --all --force /dev/sdc
echo
echo "*** Zero superblock"
mdadm --zero-superblock /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sda3 /dev/sdb3 /dev/sdc3
echo
echo "*** Allocate partitions"
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:dsm /dev/sda
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:swap /dev/sda
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:sp /dev/sda
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:dsm /dev/sdb
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:swap /dev/sdb
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:sp /dev/sdb
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:dsm /dev/sdc
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:swap /dev/sdc
sgdisk -n 0:0:+1GiB -t 0:8300 -c 0:sp /dev/sdc
echo
echo "*** Creating RAIDs"
yes | mdadm --create --verbose /dev/md0 --level=1 --raid-devices=3 /dev/sd[a-c]1
yes | mdadm --create --verbose /dev/md1 --level=1 --raid-devices=3 /dev/sd[a-c]2
yes | mdadm --create --verbose /dev/md2 --level=5 --raid-devices=3 /dev/sd[a-c]3
echo
echo "*** Formating RAID"
yes | mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md0
yes | mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md1
yes | mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0 /dev/md2
cat /proc/mdstat
exit
;;
createFiles | 2)
echo
echo "*** Persisting mdadm config"
mdadm --detail --scan --verbose | sudo tee -a /etc/mdadm/mdadm.conf
echo
echo "*** Creating mount points"
mkdir /mnt/md0
mkdir /mnt/md1
mkdir /mnt/md2
echo
echo "*** Mounting RAIDs"
mount /dev/md0 /mnt/md0
mount /dev/md1 /mnt/md1
mount /dev/md2 /mnt/md2
echo
echo "*** Creating files"
echo "DSM" > /mnt/md0/DSM
echo "SWAP" > /mnt/md1/SWAP
echo "SP" > /mnt/md2/SP
ls /mnt/md*
exit
;;
deactivateSP | 3)
echo
echo "*** Deactivate /dev/md2"
umount /dev/md2
mdadm --stop /dev/md2
cat /proc/mdstat
exit
;;
readdDevice | 4)
echo
echo "*** Readd missing device"
mdadm --manage /dev/md0 -a /dev/sda1
mdadm --manage /dev/md1 -a /dev/sda2
mdadm --manage /dev/md2 -a /dev/sda3
mdadm --assemble /dev/md2
mdadm --readwrite /dev/md2
ls /mnt/md*
cat /proc/mdstat
exit
;;
*)
echo "Available commands"
echo "createRaid|1"
echo "createFiles|2"
echo "deactivateSP|3"
echo "readdDevice|4"
exit
;;
esac