Festplatten-Kapazität erweitern (mdadm + LVM + LUKS)
Dieser Artikel oder Teile davon wurden mit 'Review' markiert. Das bedeutet, dass größere Arbeiten am Inhalt des Artikels abgeschlossen sind und der Autor eine Korrekturlesung durch andere User zur Qualitätssicherung für angebracht hält.
Zu sichtende Teile: Gesamter Artikel Bitte hilf LinuxClubWiki, indem du den zu sichtenden Teil überprüfst und den Artikel gegebenenfalls überarbeitest! |
--Gehrke (Diskussion) 17:05, 15. Jan. 2015 (CET)
In diesem Artikel sollen anhand eines Beispiels die notwendigen Arbeitsschritte erläutert werden, mit welchen die Festplatten-Kapazität eines Linux-Systems mit einem bestimmten, aber durchaus verbreiteten Partitionierungslayouts erweitert werden kann. Dabei handelt es sich um eine komplexe Konfiguration mit diesen Komponenten:
- Linux Software RAID (mdadm): Durch diese Software-Lösung im Kernel des Betriebssystems werden mehrere Festplatten zu einem einzigen, virtuellen Datenspeicher (RAID) zusammengefasst. Es gibt unterschiedliche Ausprägungen eines RAIDs. Im vorliegenden Fall bietet der Typ 'RAID6' neben einer zweifachen Redundanz auch Performance-Verbesserungen im Vergleich zu den Eigenschaften einer einzelnen Festplatte. Dies wird dadurch erreicht, dass die Daten mehrfach auf die beteiligten Datenträger geschrieben werden, wodurch die Gesamtkapazität des Verbundes im Vergleich zur der Gesamtkapazität der einzelnen Festplatten erheblich gesenkt wird.
- Linux Unified Key Setup (LUKS): Eine blockweise-arbeitende Verschlüsselungsschicht, welche transparent beim Zugriff auf ein dahinter liegendes Block-Device agiert. Nach Eingabe der Passphrase zur Entschlüsselung (beim Öffnen des LUKS-Containers) ist im praktischen Betrieb von der Existenz dieser Software kaum etwas zu merken.
- Logical Volume Manager (LVM): LVM bildet eine zusätzliche Abstraktionsebene zwischen den in realer Hardware existierenden Speicherkomponenten (Festplatten bzw. Partionen) einerseits und rein logischen Speicherblöcken andererseits. Auf Basis von LVM können logische Verbünde von Speicherbereichen über mehrere Datenträger angelegt werden und es wird eine flexiblere und dynamischere Verwaltung dieser Bereiche ermöglicht, als das mit der herkömmlichen Partitionierungsmethode möglich ist. Diese Schicht ist im Kernel implementiert.
In dem folgenden Beispiel wird eine zusätzliche Festplatte (4 TB) zu einem bestehenden Verbund aus 4 Festplatten (3 TB) eingefügt. Bei dem in diesem Beispiel verwendeten System handelt es sich um ein CentOS 6.2 in einer klassischen Fileserver-Konfiguration. Prinzipiell kann die Vorgehensweise auch auf beliebigen anderen Distributionen verwendet werden, solange die oben genannten Komponenten von dem jeweiligen System unterstützt werden.
Alle Schritte erfolgen im laufenden Betrieb, jeweils durch kurze Offlinezeiten für Reboots unterbrochen. Das ist insofern relevant, als dass einige Schritte allein schon aufgrund der großen Kapazität mehrere Tage in Anspruch nehmen und das System in dieser Zeit trotzdem seine Dienste anbieten kann. Diese Online-Funktionalität birgt ein gewisses Risiko, denn wenn ein Server in einer solchen Phase unter hohe Last gerät (und der Reshaping-Prozess verursacht selbst schon erhebliche Last), dann steigt die Wahrscheinlichkeit, dass es durch irgendeine ungünstige Randbedingung zu Problemen kommen könnte. Im vorliegenden Fall konnte dies weitgehend ausgeschlossen werden und in Anbetracht der Tatsache, dass es sich hier durchweg um 'abgehangene' Software handelt, wurde dieses Risiko zugunsten der Verfügbarkeit bewusst eingegangen. In jedem Fall ist hier aber mit temporären Performance-Einbußen zu rechnen.
Alternativ können die einzelnen Schritte aber auch im Admin-Mode oder von einer separaten Live-Distribution gebootet und somit offline durchgeführt werden.
Das Verfahren wurde nacheinander mit 2 Festplatten getestet.
Hinweis: In einem RAID6 können ausschließlich gleich große Einheiten genutzt werden. Im vorliegenden Fall werden von der neu hinzugefügten 4 TB Festplatte lediglich 3 TB für das RAID verwendet, weil das die Kapazität der schon vorhandenen Festplatten ist. Nur auf diesem Wege kann die Redundanz des Gesamtkonstruktes sichergestellt werden. Diese Festplatte hätte auch auf 3+1 TB partitioniert werden können. In diesem Fall stünde 1 TB dem System für andere Zwecke zur Verfügung.
Inhaltsverzeichnis
- 1 Bestandsaufnahme
- 2 Durchführung
- 2.1 Backup
- 2.2 Festplatte: Physischer Einbau und Hardware-Tests
- 2.3 Festplatte: Initialisierung Entropie
- 2.4 Festplatte: Partitionierung
- 2.5 Hinzufügen der Festplatten zur RAID-Konfiguration (mdadm)
- 2.6 Vergrößerung des LUKS-Containers (cryptsetup)
- 2.7 Vergrößerung des LogicalVolumes (LVM)
- 2.8 Vergrößerung des Dateisystems (ext4)
- 2.9 End-Kontrolle
- 3 Links
Bestandsaufnahme
Vorweg wird vor Durchführung irgendwelcher Maßnahmen die aktuelle Konfiguration protokolliert.
Verfügbarer Diskspace:
-bash-4.1$ df -h Dateisystem Size Used Avail Use% Eingehängt auf /dev/mapper/system-os2 15G 8,7G 5,5G 62% / tmpfs 1,9G 0 1,9G 0% /dev/shm /dev/md0 189M 148M 32M 83% /boot /dev/mapper/system-home 5,4T 5,3T 7,4G 100% /home
Partitionierungslayout:
-bash-4.1$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 2,7T 0 disk ├─sda1 8:1 0 195M 0 part │ └─md0 9:0 0 195M 0 raid1 /boot └─sda2 8:2 0 2,7T 0 part └─md1 9:1 0 5,5T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 5,5T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sdb 8:16 0 2,7T 0 disk ├─sdb1 8:17 0 195M 0 part │ └─md0 9:0 0 195M 0 raid1 /boot └─sdb2 8:18 0 2,7T 0 part └─md1 9:1 0 5,5T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 5,5T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sdc 8:32 0 2,7T 0 disk └─sdc1 8:33 0 2,7T 0 part └─md1 9:1 0 5,5T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 5,5T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sdd 8:48 0 2,7T 0 disk └─sdd1 8:49 0 2,7T 0 part └─md1 9:1 0 5,5T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 5,5T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm
Man erkennt mit 'md1' ein RAID6, welches sich über 4 Festplatten mit einer Kapazität von jeweils 3 TB erstreckt. Die hierfür verwendeten Partitionen sind: sda2, sdb2, sdc1, sdd1. Insgesamt bietet dieses Array eine Kapazität von 5,5 TB an.
In diesen RAID-Verbund wurde ein LUKS-Container gelegt, welcher für die Verschlüsselung des gesamten Inhalts sorgt. Innerhalb dieses LUKS-Containers wurde mittels LVM die eigentliche Partitionierierung mit einer VolumeGroup (VG) 'system' und mehreren LogicalVolumes (LV) eingehängt.
In diesen LVs wurden die Dateisysteme installiert und entsprechend die unterschiedlichen Mountpoints angelegt.
Status des RAID-Systems
Vorweg ein Blick in die grundlegende Konfiguration von mdadm:
[root@j4 ~]# cat /etc/mdadm.conf # mdadm.conf written out by anaconda MAILADDR <xxx>@<xxx>.de AUTO +imsm +1.x -all ARRAY /dev/md0 level=raid1 num-devices=2 UUID=b81b0e1c:6abf044a:6a1c70a2:d2ce5ea8 ARRAY /dev/md1 level=raid6 num-devices=4 UUID=777dc012:1265b112:1deadd70:c147ba88
Der aktuelle Status lässt sich wie folgt abrufen:
-bash-4.1$ cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] [raid0] md0 : active raid1 sda1[0] sdb1[1] 199668 blocks super 1.0 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk md1 : active raid6 sdb2[1] sda2[4] sdd1[3] sdc1[2] 5860130304 blocks super 1.0 level 6, 128k chunk, algorithm 2 [4/4] [UUUU] bitmap: 8/22 pages [32KB], 65536KB chunk unused devices: <none>
- md0: Ein RAID1 für die Boot-Partition. Diese soll unverändert bleiben.
- md1: Dieser Bereich nimmt den gesamten Rest der Festplatten auf und enthält innerhalb eines LUKS-Containers eine Partitionierung auf Basis von LVM. Der Großteil des verfügbaren Speicherbereiches liegt im Logical Volume (LV) 'home' der Volume Group (VG) 'system' , welches für die home-Partition genutzt wird. Das LV 'home' soll vergrößert werden.
Zur Sicherheit wird die Konfiguration des RAIDs komplett protokolliert, was im Fehlerfall sehr hilfreich sein kann:
[root@j4 ~]# mdadm -Evvvvs mdadm: No md superblock detected on /dev/dm-6. mdadm: No md superblock detected on /dev/md2. /dev/sdg: Magic : 1c8b6af0 Version : 1.2 Feature Map : 0x0 Array UUID : d6222b74:62a16222:72ce5222:021ffa21 Name : j4.gehrke.local:2 (local to host j4.gehrke.local) Creation Time : Sun Apr 21 10:33:40 2013 Raid Level : raid0 Raid Devices : 2 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : e399d670:1f393a93:1a97d969:50e99398 Update Time : Sun Apr 21 10:33:40 2013 Checksum : 5f1b2ffb - correct Events : 0 Chunk Size : 512K Device Role : Active device 0 Array State : AA ('A' == active, '.' == missing) /dev/sdf: Magic : 1c8b6af0 Version : 1.2 Feature Map : 0x0 Array UUID : d6222b74:62a16222:72ce5222:021ffa21 Name : j4.gehrke.local:2 (local to host j4.gehrke.local) Creation Time : Sun Apr 21 10:33:40 2013 Raid Level : raid0 Raid Devices : 2 Avail Dev Size : 7814035120 (3726.02 GiB 4000.79 GB) Data Offset : 2048 sectors Super Offset : 8 sectors State : clean Device UUID : 1ee8c2fc:61ff51e1:17e1d316:81b4fe18 Update Time : Sun Apr 21 10:33:40 2013 Checksum : 9889113d - correct Events : 0 Chunk Size : 512K Device Role : Active device 1 Array State : AA ('A' == active, '.' == missing) /dev/dm-5: MBR Magic : aa55 Partition[0] : 208782 sectors at 63 (type 83) Partition[1] : 20755980 sectors at 208845 (type 8e) mdadm: No md superblock detected on /dev/dm-4. mdadm: No md superblock detected on /dev/dm-3. mdadm: No md superblock detected on /dev/md0. mdadm: No md superblock detected on /dev/dm-2. mdadm: No md superblock detected on /dev/dm-1. mdadm: No md superblock detected on /dev/dm-0. mdadm: No md superblock detected on /dev/md1. /dev/sdd1: Magic : 1c8b6af0 Version : 1.0 Feature Map : 0x1 Array UUID : 777dc012:1265b112:1deadd70:c147ba88 Name : linux:1 Creation Time : Tue Aug 30 23:44:02 2011 Raid Level : raid6 Raid Devices : 4 Avail Dev Size : 5860529904 (2794.52 GiB 3000.59 GB) Array Size : 11720260608 (5588.66 GiB 6000.77 GB) Used Dev Size : 5860130304 (2794.33 GiB 3000.39 GB) Super Offset : 5860530160 sectors State : active Device UUID : 46a44e64:25490431:1bdf44dd:045476e5 Internal Bitmap : -16 sectors from superblock Update Time : Fri Dec 26 18:18:11 2014 Checksum : 4eb54f4b - correct Events : 852198 Layout : left-symmetric Chunk Size : 128K Device Role : Active device 3 Array State : AAAA ('A' == active, '.' == missing) /dev/sdd: MBR Magic : aa55 Partition[0] : 4294967295 sectors at 2048 (type 83) Partition[1] : 4294967295 sectors at 401408 (type 83) Partition[3] : 1 sectors at 1 (type ee) /dev/sdc1: Magic : 1c8b6af0 Version : 1.0 Feature Map : 0x1 Array UUID : 777dc012:1265b112:1deadd70:c147ba88 Name : linux:1 Creation Time : Tue Aug 30 23:44:02 2011 Raid Level : raid6 Raid Devices : 4 Avail Dev Size : 5860529904 (2794.52 GiB 3000.59 GB) Array Size : 11720260608 (5588.66 GiB 6000.77 GB) Used Dev Size : 5860130304 (2794.33 GiB 3000.39 GB) Super Offset : 5860530160 sectors State : clean Device UUID : cafb19a0:27a4a2a5:fa21aa35:6aecae86 Internal Bitmap : -16 sectors from superblock Update Time : Fri Dec 26 18:18:11 2014 Checksum : 26d438a2 - correct Events : 852197 Layout : left-symmetric Chunk Size : 128K Device Role : Active device 2 Array State : AAAA ('A' == active, '.' == missing) /dev/sdc: MBR Magic : aa55 Partition[0] : 4294967295 sectors at 2048 (type 83) Partition[1] : 4294967295 sectors at 401408 (type 83) Partition[3] : 1 sectors at 1 (type ee) /dev/sdb2: Magic : 1c8b6af0 Version : 1.0 Feature Map : 0x1 Array UUID : 777dc012:1265b112:1deadd70:c147ba88 Name : linux:1 Creation Time : Tue Aug 30 23:44:02 2011 Raid Level : raid6 Raid Devices : 4 Avail Dev Size : 5860130544 (2794.33 GiB 3000.39 GB) Array Size : 11720260608 (5588.66 GiB 6000.77 GB) Used Dev Size : 5860130304 (2794.33 GiB 3000.39 GB) Super Offset : 5860130800 sectors State : clean Device UUID : 20d270d6:70a10cd2:40d00d99:905540a0 Internal Bitmap : -16 sectors from superblock Update Time : Fri Dec 26 18:18:11 2014 Checksum : dc596b58 - correct Events : 852197 Layout : left-symmetric Chunk Size : 128K Device Role : Active device 1 Array State : AAAA ('A' == active, '.' == missing) /dev/sdb1: Magic : 1c8b6af0 Version : 1.0 Feature Map : 0x1 Array UUID : b81b0e1c:6abf044a:6a1c70a2:d2ce5ea8 Name : linux.site:0 Creation Time : Fri Oct 21 23:08:05 2011 Raid Level : raid1 Raid Devices : 2 Avail Dev Size : 399336 (195.02 MiB 204.46 MB) Array Size : 399336 (195.02 MiB 204.46 MB) Super Offset : 399344 sectors State : clean Device UUID : 09eff255:25b5e555:6559d544:6552956a Internal Bitmap : -8 sectors from superblock Update Time : Fri Dec 26 13:29:17 2014 Checksum : a92b2b9b - correct Events : 445 Device Role : Active device 1 Array State : AA ('A' == active, '.' == missing) /dev/sdb: MBR Magic : aa55 Partition[0] : 4294967295 sectors at 1 (type ee) /dev/sda2: Magic : 1c8b6af0 Version : 1.0 Feature Map : 0x1 Array UUID : 777dc012:1265b112:1deadd70:c147ba88 Name : linux:1 Creation Time : Tue Aug 30 23:44:02 2011 Raid Level : raid6 Raid Devices : 4 Avail Dev Size : 5860130544 (2794.33 GiB 3000.39 GB) Array Size : 11720260608 (5588.66 GiB 6000.77 GB) Used Dev Size : 5860130304 (2794.33 GiB 3000.39 GB) Super Offset : 5860130800 sectors State : clean Device UUID : f488edfc:383b88e2:93f894b8:e8af58f8 Internal Bitmap : -16 sectors from superblock Update Time : Fri Dec 26 18:18:11 2014
Status von LUKS
[root@j4 ~]# cryptsetup status /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 /dev/mapper//dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 is active and is in use. type: LUKS1 cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/md1 offset: 4096 sectors size: 11720256512 sectors mode: read/write
Achtung: |
Der Cipher 'aes-cbc' kann vom aktuellem Standpunkt nicht mehr als sicher eingestuft werden und sollte dringend in nächster Zeit gegen 'aes-xts' ausgetauscht werden (s. Erfolgreicher Angriff auf Linux-Verschlüsselung (heise security 23.12.2013))! |
Status von LVM
[root@j4 ~]# lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert home system -wi-ao 5,39t os1 system -wi-a- 15,00g os2 system -wi-ao 15,00g swap system -wi-ao 4,00g vm1 system -wi-a- 10,00g [root@j4 ~]# pvdisplay --- Physical volume --- PV Name /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 VG Name system PV Size 5,46 TiB / not usable 1,50 MiB Allocatable yes PE Size 4,00 MiB Total PE 1430695 Free PE 6474 Allocated PE 1424221 PV UUID g9hWlI-2sO1-ZubK-DZXV-yNcZ-P2UM-ReEDlx [root@j4 ~]# lvdisplay --- Logical volume --- LV Name /dev/system/home VG Name system LV UUID n2gKl4-gCf3-R3Zb-822b-fbI1-rYkA-mz544F LV Write Access read/write LV Status available # open 1 LV Size 5,39 TiB Current LE 1412957 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 253:3 --- Logical volume --- LV Name /dev/system/os1 VG Name system LV UUID m4JIJe-qO12-bJLU-A33Q-art1-2fb8-oVgkJ4 LV Write Access read/write LV Status available # open 0 LV Size 15,00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 253:4 --- Logical volume --- LV Name /dev/system/os2 VG Name system LV UUID KXn60L-fr1L-fi3R-Foa0-fpi9-ew3u-S40oP1 LV Write Access read/write LV Status available # open 1 LV Size 15,00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 253:1 --- Logical volume --- LV Name /dev/system/swap VG Name system LV UUID rXyEIP-M3xE-tj3J-AiQy-524d-Tq6e-IpLy4v LV Write Access read/write LV Status available # open 1 LV Size 4,00 GiB Current LE 1024 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 253:2 --- Logical volume --- LV Name /dev/system/vm1 VG Name system LV UUID 3v326C-M9go-prOT-QLIX-9Sf3-924t-wZ4BeY LV Write Access read/write LV Status available # open 0 LV Size 10,00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 1024 Block device 253:5
Durchführung
Zuerst werden zwingend notwendige Vorarbeiten wie das Backup durchgeführt. Erst danach werden die eigentlichen Schritte durchgeführt, bei denen die Systemkonfiguration auch verändert wird.
Die Schritte im Einzelnen:
- Backup
- Festplatte: Physischer Einbau und Hardware-Tests
- Festplatte: Partitionierung
- Festplatte: Initialisierung Entropie
- Hinzufügen der Festplatten zur RAID-Konfiguration (mdadm)
- Vergrößerung des LUKS-Containers (cryptsetup)
- Vergrößerung des LogicalVolumes (LVM)
- Vergrößerung des Dateisystems (ext4)
- End-Kontrolle
Backup
Achtung: |
Die folgenden Schritte greifen sehr tief in das System ein und bergen ein erhebliches Risiko, sämtliche Daten auf den Festplatten zu zerstören! |
Es ist demnach absolut notwendig, vor der Durchführung der folgenden Schritte ein komplettes und valides Backup durchzuführen.
Festplatte: Physischer Einbau und Hardware-Tests
Festplatten können auf aktueller Server-Hardware in der Regel im laufenden Betrieb eingebaut werden. Die neue Festplatte wird physisch eingebaut und kontrolliert, dass die Hardware vom Controller erkannt wird:
[root@j4 ~]# tail -f /var/log/messages Dec 27 08:57:11 j4 kernel: ata10: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen Dec 27 08:57:11 j4 kernel: ata10: irq_stat 0x00000040, connection status changed Dec 27 08:57:11 j4 kernel: ata10: SError: { CommWake DevExch } Dec 27 08:57:11 j4 kernel: ata10: hard resetting link Dec 27 08:57:21 j4 kernel: ata10: softreset failed (device not ready) Dec 27 08:57:21 j4 kernel: ata10: hard resetting link Dec 27 08:57:22 j4 kernel: ata9: exception Emask 0x10 SAct 0x0 SErr 0x4040000 action 0xe frozen Dec 27 08:57:22 j4 kernel: ata9: irq_stat 0x00000040, connection status changed Dec 27 08:57:22 j4 kernel: ata9: SError: { CommWake DevExch } Dec 27 08:57:22 j4 kernel: ata9: hard resetting link Dec 27 08:57:26 j4 kernel: ata10: SATA link up 3.0 Gbps (SStatus 123 SControl 300) Dec 27 08:57:26 j4 kernel: ata10.00: ATA-8: WDC WD4000FYXX-35TH42J, 01.01K02, max UDMA/133 Dec 27 08:57:26 j4 kernel: ata10.00: 7814037168 sectors, multi 0: LBA48 NCQ (depth 31/32), AA Dec 27 08:57:26 j4 kernel: ata10.00: configured for UDMA/133 Dec 27 08:57:26 j4 kernel: ata10: EH complete Dec 27 08:57:26 j4 kernel: scsi 9:0:0:0: Direct-Access ATA WDC WD4000FYXX-0 01.0 PQ: 0 ANSI: 5 Dec 27 08:57:26 j4 kernel: sd 9:0:0:0: Attached scsi generic sg6 type 0 Dec 27 08:57:26 j4 kernel: sd 9:0:0:0: [sde] 7814037168 512-byte logical blocks: (4.00 TB/3.63 TiB) Dec 27 08:57:26 j4 kernel: sd 9:0:0:0: [sde] Write Protect is off Dec 27 08:57:26 j4 kernel: sd 9:0:0:0: [sde] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA Dec 27 08:57:26 j4 kernel: sde: unknown partition table Dec 27 08:57:26 j4 kernel: sd 9:0:0:0: [sde] Attached SCSI disk
Die neue Hardware wurde also erkannt und kann verwendet werden. Auch 'lsblk' zeigt die neue Festplatte, bislang ohne Verwendung (MOUNTPOINT):
[root@j4 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT [...] sde 8:64 0 3,7T 0 disk
An dieser Stelle sollten ebenfalls die Informationen zur Festplatten-Geometrie abgerufen und für den Notfall gespeichert werden:
[root@j4 ~]# fdisk -l /dev/sde Platte /dev/sde: 4000.8 GByte, 4000787030016 Byte 255 Köpfe, 63 Sektoren/Spur, 486401 Zylinder Einheiten = Zylinder von 16065 × 512 = 8225280 Bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Festplatte /dev/sde enthält keine gültige Partitionstabelle
Bei dieser Gelegenheit sollte man sich auch mittels smartctl die Hardware-Eigenschaften der (hoffentlich) neuen Festplatte genauer ansehen und auf Fehler prüfen:
[root@j4 ~]# smartctl --all /dev/sde smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: WDC WD4000FYXX-35TH42J Serial Number: WD-WCC233242840 Firmware Version: 01.01K02 User Capacity: 4.000.787.030.016 bytes Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: Exact ATA specification draft version not indicated Local Time is: Sat Dec 27 09:05:56 2014 CET SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x80) Offline data collection activity was never started. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: (45660) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 255) minutes. Conveyance self-test routine recommended polling time: ( 5) minutes. SCT capabilities: (0x70bd) SCT Status supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 100 253 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 100 253 021 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 1 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 0 10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 0 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 0 194 Temperature_Celsius 0x0022 125 119 000 Old_age Always - 27 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 No self-tests have been logged. [To run self-tests, use: smartctl -t] SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
Durchführung eines kurzen Selbst-Tests der Festplatte:
[root@j4 ~]# smartctl --test=short /dev/sde smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION === Sending command: "Execute SMART Short self-test routine immediately in off-line mode". Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful. Testing has begun. Please wait 2 minutes for test to complete. Test will complete after Sat Dec 27 09:28:24 2014 Use smartctl -X to abort test.
Nach entsprechender Wartezeit:
[root@j4 ~]# smartctl --all /dev/sde smartctl 5.39.1 2010-01-28 r3054 [x86_64-unknown-linux-gnu] (local build) Copyright (C) 2002-10 by Bruce Allen, http://smartmontools.sourceforge.net === START OF INFORMATION SECTION === Device Model: WDC WD4000FYXX-35TH42J Serial Number: WD-WCC233242840 Firmware Version: 01.01K02 User Capacity: 4.000.787.030.016 bytes Device is: Not in smartctl database [for details use: -P showall] ATA Version is: 8 ATA Standard is: Exact ATA specification draft version not indicated Local Time is: Sat Dec 27 09:23:51 2014 CET SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x80) Offline data collection activity was never started. Auto Offline Data Collection: Enabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: (45660) seconds. Offline data collection capabilities: (0x7b) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. Offline surface scan supported. Self-test supported. Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 255) minutes. Conveyance self-test routine recommended polling time: ( 5) minutes. SCT capabilities: (0x70bd) SCT Status supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 16 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 1 Raw_Read_Error_Rate 0x002f 100 253 051 Pre-fail Always - 0 3 Spin_Up_Time 0x0027 100 253 021 Pre-fail Always - 0 4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 1 5 Reallocated_Sector_Ct 0x0033 200 200 140 Pre-fail Always - 0 7 Seek_Error_Rate 0x002e 100 253 000 Old_age Always - 0 9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 0 10 Spin_Retry_Count 0x0032 100 253 000 Old_age Always - 0 11 Calibration_Retry_Count 0x0032 100 253 000 Old_age Always - 0 12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 1 183 Runtime_Bad_Block 0x0032 100 100 000 Old_age Always - 0 192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 0 193 Load_Cycle_Count 0x0032 200 200 000 Old_age Always - 0 194 Temperature_Celsius 0x0022 112 112 000 Old_age Always - 40 196 Reallocated_Event_Count 0x0032 200 200 000 Old_age Always - 0 197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0 198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0 199 UDMA_CRC_Error_Count 0x0032 200 253 000 Old_age Always - 0 200 Multi_Zone_Error_Rate 0x0008 100 253 000 Old_age Offline - 0 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 1 Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error # 1 Short offline Completed without error 00% 0 - # 2 Short offline Completed without error 00% 0 - SMART Selective self-test log data structure revision number 1 SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 0 minute delay.
Festplatte: Initialisierung Entropie
Die Qualität eines Verschlüsselungssystems hängt ab von der initialen Herstellung einer geeigneten Entropie auf dem jeweiligem Datenträger. Bei einer Formatierung für LUKS wird der verwendete Bereich nicht überschrieben, so dass in noch nicht neu verwendeten Blöcken alte Datenstrukturen oder einfach nur Nullen (bei einer neuen Festplatte) erkennbar bleiben. Dies könnte Angreifern Rückschlüsse ermöglichen, die die Vertraulichkeit des Containerinhaltes gefährden.
Um das zu verhindern, wird in diesem Schritt der Datenträger mit Zufallswerten beschrieben. Je nach Anwendungsfall und nach Grad der persönlichen Paranoia kann dieser Schritt auch mehrfach durchgeführt werden.
Achtung: |
Bei diesem Schritt werden alle Daten auf dem angegebenen Datenträger überschrieben. Es ist deshalb unbedingt sicherzustellen, dass hier das korrekte Ziel angegeben wird. |
Es wird screen verwendet, damit ein solch lang-anhaltender Prozess nicht die Remote-Verbindung blockiert. Auf 'screen' kann auch verzichtet werden:
[root@j4 ~]# screen time dd if=/dev/urandom of=/dev/sde bs=8K
Ein einzelner Durchgang kann - in Abhängigkeit von der Performance und Größe der Festplatte - viele Stunden oder auch Tage andauern. Die Initialisierung erfolgt über das Pseudo-Device '/dev/urandom'. Im Vergleich dazu bietet '/dev/random' eine bessere Qualität bei der Zufälligkeit, ist aber sehr viel langsamer und insofern für die Initialisierung von Festplatten im Terabyte-Bereich nicht praktikabel.
Eine Möglichkeit, diesen Prozess zu beschleunigen, ist es, die Generierung auf mehrere Computer zu verteilen: Verteilte Generierung von Zufallszahlen.
Eine um Faktor 20 schnellere Alternativlösung ist es, zuerst einen LUKS-Container aufzubringen und diesen danach mittels dd mit Nullen vom Pseudo-Device /dev/zero vollzuschreiben: Wie eine Platte unwiederherstellbar und sicher loeschen#Überschreiben mittels Verschlüsselung.
Der Autor kann die Auswirkung dieser beiden Verfahren auf die resultierende Sicherheitslage nicht verlässlich beurteilen, hier muss der Anwender die Entscheidung selbst auf Basis eigener Recherchen und passend zu den eigenen Bedürfnissen treffen!
Festplatte: Partitionierung
Es besteht die Wahlmöglichkeit, entweder die komplette Festplatte oder eine Partition dem RAID hinzuzufügen. Da die bestehenden Teile des RAIDs schon als Partitionen hinzugefügt worden sind, wird zugunsten einer konsistenten Lösung hier ebenfalls diese Option gewählt.
Dementsprechend wird eine Partition über die gesamte Festplatte angelegt und mit dem passenden Typ '0xFD' bzw. 'fd00' (Linux RAID) gekennzeichnet. Hierzu wird das Tool gdisk statt fdisk verwendet, weil für eine solch große Partition GPT verwendet werden muss und 'fdisk' diese Technik nicht beherrscht:
[root@j4 ~]# gdisk /dev/sde GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): n Partition number (1-128, default 1): First sector (34-7814037134, default = 2048) or {+-}size{KMGTP}: Last sector (2048-7814037134, default = 7814037134) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 Changed type of partition to 'Linux RAID' Command (? for help): p Disk /dev/sde: 7814037168 sectors, 3.6 TiB Logical sector size: 512 bytes Disk identifier (GUID): FFA78597-F5DA-4933-8539-80E043629B91 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 7814037134 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 7814037134 3.6 TiB FD00 Linux RAID Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/sde. The operation has completed successfully.
Nach der Änderung der Partitionierung wird das System sicherheitshalber neu gestartet:
[root@j4 ~]# reboot
Hinzufügen der Festplatten zur RAID-Konfiguration (mdadm)
Im nächsten Schritt wird das RAID um die zuvor erzeugte Partition erweitert:
[root@j4 ~]# mdadm --manage /dev/md1 --add /dev/sde1 mdadm: added /dev/sde1 [root@j4 ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid1 sda1[0] sdb1[1] 199668 blocks super 1.0 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk md1 : active raid6 sde1[5](S) sda2[4] sdb2[1] sdc1[2] sdd1[3] 5860130304 blocks super 1.0 level 6, 128k chunk, algorithm 2 [4/4] [UUUU] bitmap: 1/22 pages [4KB], 65536KB chunk unused devices: <none>
[root@j4 ~]# mdadm --grow /dev/md1 --raid-devices=5 mdadm: Need to backup 768K of critical section.. mdadm: Cannot set device shape for /dev/md1: Device or resource busy Bitmap must be removed before shape can be changed
Es liegt ein write-intent bitmap vor (s. [1]), welches zuerst entfernt werden muss:
[root@j4 ~]# mdadm --grow /dev/md1 -b none [root@j4 ~]# mdadm --grow /dev/md1 --raid-devices=5 mdadm: Need to backup 768K of critical section.. [root@j4 ~]# mdadm --wait /dev/md1
In einer parallelen Session kann man jetzt die Aktivität des Re-Shapings erkennen, auch die Statusanzeigen der Festplatten dürften jetzt hektisch dauerblinken. An dieser Stelle werden die bislang auf 4 Festplatten lagernden Datenbestände auf 5 Platten ('UUUUU') umverteilt, es wird aber noch keinerlei Speicherplatz zusätzlich zur Verfügung gestellt. Dieser Prozess kann je nach Kapazität und Performance der Platten viele Stunden oder Tage andauern. Im folgenden Beispiel wird eine Restlaufzeit von ca. 43 Stunden (2557.6min) als Hochrechnung auf Basis der aktuellen Performance prognostiziert, welche sich aber kontinuierlich ändern kann:
[root@j4 ~]# watch "cat /proc/mdstat" Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid1 sda1[0] sdb1[1] 199668 blocks super 1.0 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk md1 : active raid6 sda2[4] sdb2[1] sdd1[3] sdc1[2] sde1[5] 5860130304 blocks super 1.0 level 6, 128k chunk, algorithm 2 [5/5] [UUUUU] [>....................] reshape = 1.5% (46714588/2930065152) finish=2557.6min speed=18788K/sec unused devices: <none>
In dieser Phase ist das System durch das Re-Shaping stark ausgelastet und reagiert nur noch eingeschränkt - es ist mit Performance-Einbussen zu rechnen. Die Auslastung (load) auf dem hier verwendeten System lag ohne zusätzliche Useraktivitäten bei ca. 1,2.
Erst nach Abschluss des Re-Shaping-Prozesses geht es weiter:
[root@j4 ~]# mdadm --grow /dev/md1 -b internal
Nach erfolgreichem Abschluss sollte der Status des Arrays sauber dargestellt werden (nun wird auch wieder ein bitmap verwendet):
Personalities : [raid6] [raid5] [raid4] [raid1] md0 : active raid1 sda1[0] sdb1[1] 199668 blocks super 1.0 [2/2] [UU] bitmap: 0/1 pages [0KB], 65536KB chunk md1 : active raid6 sda2[4] sdb2[1] sdd1[3] sdc1[2] sde1[5] 8790195456 blocks super 1.0 level 6, 128k chunk, algorithm 2 [5/5] [UUUUU] bitmap: 1/11 pages [4KB], 131072KB chunk unused devices: <none>
Es ist notwendig, die Konfiguration für die Anzahl der Devices (num-devices) für den nächsten Boot-Vorgang von '4' auf '5' zu verändern.
Nahcher:
[root@j4 ~]# grep 'md1' /etc/mdadm.conf ARRAY /dev/md1 level=raid6 num-devices=5 UUID=777dc012:1265b112:1deadd70:c147ba88
Zum Abschluss sollte das System gebootet und der saubere Status noch einmal sichergestellt werden.
[root@j4 ~]# fdisk -l /dev/md1 Platte /dev/md1: 9001.2 GByte, 9001160146944 Byte 2 Köpfe, 4 Sektoren/Spur, -2097418432 Zylinder Einheiten = Zylinder von 8 × 512 = 4096 Bytes Sector size (logical/physical): 512 bytes / 4096 bytes I/O size (minimum/optimal): 131072 bytes / 393216 bytes Disk identifier: 0x08040000 Festplatte /dev/md1 enthält keine gültige Partitionstabelle
[root@j4 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sdb 8:16 0 2,7T 0 disk ├─sdb1 8:17 0 195M 0 part │ └─md0 9:0 0 195M 0 raid1 /boot └─sdb2 8:18 0 2,7T 0 part └─md1 9:1 0 8,2T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 8,2T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sdc 8:32 0 2,7T 0 disk └─sdc1 8:33 0 2,7T 0 part └─md1 9:1 0 8,2T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 8,2T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sda 8:0 0 2,7T 0 disk ├─sda1 8:1 0 195M 0 part │ └─md0 9:0 0 195M 0 raid1 /boot └─sda2 8:2 0 2,7T 0 part └─md1 9:1 0 8,2T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 8,2T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sde 8:64 0 3,7T 0 disk └─sde1 8:65 0 3,7T 0 part └─md1 9:1 0 8,2T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 8,2T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm sdd 8:48 0 2,7T 0 disk └─sdd1 8:49 0 2,7T 0 part └─md1 9:1 0 8,2T 0 raid6 └─luks-bc641135-b1f2-4127-8112-b158e0112e16 (dm-0) 253:0 0 8,2T 0 crypt ├─system-os2 (dm-1) 253:1 0 15G 0 lvm / ├─system-swap (dm-2) 253:2 0 4G 0 lvm [SWAP] ├─system-home (dm-3) 253:3 0 5,4T 0 lvm /home ├─system-os1 (dm-4) 253:4 0 15G 0 lvm └─system-vm1 (dm-5) 253:5 0 10G 0 lvm
Hinweis: md1 verfügt nun über eine Kapazität von 8,2T - zuvor hatte dieses Device nur 5,5T. In einem zweiten Schritt wurde eine weitere 4T Festplatte hinzugefügt, wodurch sich die Gesamtkapazität real um weitere 2,8T erhöhte. Die dabei auftretenden 1,2T Differenz (30%) werden für die Bildung der doppelten Redundanz (RAID6) verwendet und können nicht für Nutzdaten verwendet werden. Diesen Preis muss man dafür bezahlen, dass das RAID auch bei Ausfall von 2 Festplatten noch verfügbar sein soll.
Vergrößerung des LUKS-Containers (cryptsetup)
Im Vergleich zum zuvor protokolliertem Stand erkennt man eine Vergrößerung auch schon beim LUKS-Container, welche das System automatisch erkannt hat.
[root@j4 ~]# cryptsetup status /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 /dev/mapper//dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 is active and is in use. type: LUKS1 cipher: aes-cbc-essiv:sha256 keysize: 256 bits device: /dev/md1 offset: 4096 sectors size: 17580386816 sectors mode: read/write
Zuvor:
size: 11720256512 sectors
Vergrößerung des LogicalVolumes (LVM)
Im Gegensatz zu LUKS ist die Größenänderung beim LVM noch nicht bekannt:
[root@j4 ~]# pvs PV VG Fmt Attr PSize PFree /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 system lvm2 a-- 5,46t 25,29g
Ein Aufrug von pvresize sorgt dafür, dass die Kapazitäten auf dem physischen Layer zur Kenntnis genommen werden:
[root@j4 ~]# pvresize /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 Physical volume "/dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16" changed 1 physical volume(s) resized / 0 physical volume(s) not resized [root@j4 ~]# pvs PV VG Fmt Attr PSize PFree /dev/mapper/luks-bc641135-b1f2-4127-8112-b158e0112e16 system lvm2 a-- 8,19t 2,75t
Jetzt kommt der große Moment, bei dem das LV für '/home' auf die maximale Größe erweitert wird. Beachtenswert ist, dass dies in einem Zuge mit einer Erweiterung des darin liegenden Dateisystems (ext4) einher geht (Parameter resizefs).
Dieser Prozess passiert ebenfalls online (mit gemountetem Dateisystem) und dauert einige Stunden:
[root@j4 ~]# lvresize --resizefs --size +2,75T system/home Extending logical volume home to 8,14 TiB Logical volume home successfully resized resize2fs 1.41.12 (17-May-2010) Das Dateisystem auf /dev/mapper/system-home ist auf /home eingehängt; Online-Grössenveränderung nötig old desc_blocks = 345, new_desc_blocks = 521 Führe eine Online-Grössenänderung von /dev/mapper/system-home auf 2185065472 (4k) Blöcke durch.
... 5 Stunden warten ...
Das Dateisystem auf /dev/mapper/system-home ist nun 2185065472 Blöcke groß. [root@j4 ~]# df -h Dateisystem Size Used Avail Use% Eingehängt auf /dev/mapper/system-os2 15G 8,7G 5,4G 62% / tmpfs 1,9G 0 1,9G 0% /dev/shm /dev/md0 189M 148M 32M 83% /boot /dev/mapper/system-home 8,1T 5,3T 2,8T 66% /home
Man erkennt, dass nun tatsächlich der neue Speicherplatz für /home verfügbar gemacht wurde. Der Anstieg der Speicherkapazität erfolgt nicht plötzlich, sondern kontinuierlich und kann während des Prozesses beispielsweise mit dem Tool 'df' beobachtet werden.
Vergrößerung des Dateisystems (ext4)
Die Vergrößerung des Dateisystems wurde schon implizit im vorigen Prozessschritt durchgeführt. Das war möglich, weil das verwendete Dateisystem ext4 die Funktionalität Online-Grössenveränderung bietet. Bei Wahl eines anderen Systems hätte dieser Schritt aber auch explizit jetzt ausgeführt werden können, wobei dabei das Dateisystem möglicherweise ausgehangen (umount) werden muss.
End-Kontrolle
Nach einem erneuten Reboot und einer anschließenden End-Kontrolle inklusive Durchsicht der Logs sollte der Prozess nun abgeschlossen sein.
Ein detaillierter Blick auf das RAID:
[root@j4 ~]# mdadm --detail /dev/md1 /dev/md1: Version : 1.0 Creation Time : Tue Aug 30 23:44:02 2011 Raid Level : raid6 Array Size : 11720260608 (11177.31 GiB 12001.55 GB) Used Dev Size : 2930065152 (2794.33 GiB 3000.39 GB) Raid Devices : 6 Total Devices : 6 Persistence : Superblock is persistent Intent Bitmap : Internal Update Time : Wed Jan 21 20:17:34 2015 State : active Active Devices : 6 Working Devices : 6 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 128K Name : linux:1 UUID : 777dc012:1265b112:1deadd70:c147ba88 Events : 905152 Number Major Minor RaidDevice State 4 8 2 0 active sync /dev/sda2 1 8 18 1 active sync /dev/sdb2 2 8 33 2 active sync /dev/sdc1 3 8 49 3 active sync /dev/sdd1 5 8 65 4 active sync /dev/sde1 6 8 81 5 active sync /dev/sdf1
Links
- linux software raid (raid.wiki.kernel.org)
- Growing (raid.wiki.kernel.org)
- Software RAID on Linux with mdadm (amadys.blogspot.de)
- Kritischer Artikel zu RAID5 + RAID6 (techrepublic.com)
- Kritischer Artikel zu RAID5 Betrifft eine hohe Ausfallwahrscheinlichkeit während der Re-Shaping-Phase
- lvresize(8) - Linux man page
- Logical Volume Manager (wikipedia)
- RAID
- Thread zum Thema 'Initialisierung mit Zufallszahlen' (linux-talk.de)