[Erledigt] RAID 1: Mit größeren Platten ersetzen

Probleme mit Samba, NFS, FTP und Co.
Antworten
buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

[Erledigt] RAID 1: Mit größeren Platten ersetzen

Beitrag von buhtz » 02.12.2020 13:49:42

Ich hab eine 1TB große RAID1-Partition (ext4), dass allerdings aus zwei 2TB Elementen/Platten besteht. Ich schaffe es nicht, die RAID Partition entsprechend der darunter liegenden Platten zu erweitertn.

In einer VM zu Testzwecken, möchte ein RAID1 mit zwei 1-TeraByte-Festplatten durch zwei 2-TeraByte-Festplatten ersetzen.
Den Ersatz der ersten 1TB-Platte hab ich übersprungen und gleich ein RAID1 mit einer 1TB und einer 2TB Platte angelegt.
Die beiden Platten sind jeweils sdb und sdc.

Output hier etwas verkürzt dargestellt.

Code: Alles auswählen

sudo fdisk /dev/sdb
sudo fdisk /dev/sdc
# jeweils voll größe eine "fd" (linux raid autodetect) partition
sudo fdisk -l

Disk /dev/sdb: 1 TiB
Disklabel type: dos
/dev/sdb1        1T fd Linux raid autodetect

Disk /dev/sdc: 2 TiB
Disklabel type: dos
/dev/sdc1        2T fd Linux raid autodetect

sudo mdadm --create /dev/md127 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1
sudo makefs.ext4 /dev/md127

sudo fdisk -l
Disk /dev/md127: 1023,9 GiB

sudo lsblk
NAME      MAJ:MIN RM    SIZE RO TYPE  MOUNTPOINT
sda         8:0    0     32G  0 disk
└─sda1      8:1    0     32G  0 part  /
sdb         8:16   0      1T  0 disk
└─sdb1      8:17   0      1T  0 part
  └─md127   9:127  0 1023,9G  0 raid1 /Daten
sdc         8:32   0      2T  0 disk
└─sdc1      8:33   0      2T  0 part
  └─md127   9:127  0 1023,9G  0 raid1 /Daten
Ok, dann hab ich /dev/sdb mit einer 2TB Platte ausgetauscht, über die vollen 2TB eine "fd" Partition /dev/sdb1 gelegt und dem RAID wieder hinzugefügt. Läuft. Sind (wie erwartet) trotzdem nur 1TB zur Verfügung, obwohl jetzt beide RAID Elemente jeweils 2TB haben.

Was ich jetzt nicht erwartet hatte, dass ein resize2fs auf dem RAID-Dateisystem nicht funktioniert.

Code: Alles auswählen

$ sudo resize2fs /dev/md127
resize2fs 1.44.5 (15-Dec-2018)
The filesystem is already 268402176 (4k) blocks long.  Nothing to do!
Wo denke ich jetzt hier falsch?

Vielleicht ist dieser Output noch aufschlußreich?

Code: Alles auswählen

$ sudo cat /proc/mdstat
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10]
md127 : active raid1 sdb1[2] sdc1[1]
      1073608704 blocks super 1.2 [2/2] [UU]
      bitmap: 0/8 pages [0KB], 65536KB chunk

unused devices: <none>
$ sudo mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
     Creation Time : Wed Dec  2 10:51:00 2020
        Raid Level : raid1
        Array Size : 1073608704 (1023.87 GiB 1099.38 GB)
     Used Dev Size : 1073608704 (1023.87 GiB 1099.38 GB)
      Raid Devices : 2
     Total Devices : 2
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : Wed Dec  2 13:36:16 2020
             State : clean
    Active Devices : 2
   Working Devices : 2
    Failed Devices : 0
     Spare Devices : 0

Consistency Policy : bitmap

              Name : NAStest:md0  (local to host NAStest)
              UUID : 53a18255:73d29125:9d5023f7:ceaff915
            Events : 12838

    Number   Major   Minor   RaidDevice State
       2       8       17        0      active sync   /dev/sdb1
       1       8       33        1      active sync   /dev/sdc1
Zuletzt geändert von buhtz am 30.07.2021 11:27:48, insgesamt 1-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von buhtz » 02.12.2020 14:01:07

Schön! Wenn man es aufschreibt und gezwungen ist, die Sache strukturierter zu betrachten, kommt man selbst drauf.
Es muss nicht auf Ebenen der Platten/Elemente oder Dateisysteme manipuliert werden, sondern auf RAID-Ebene also mit Debianmdadm.

Code: Alles auswählen

$ sudo mdadm --grow /dev/md127 --size=max
mdadm: component size of /dev/md127 has been set to 2147349504K
Im Ergebnis, muss ich scheinbar(?) nicht mal mehr die ext4 Partition auf /dev/md127 explizit vergrößern, sondern die wächst gleich einfach mit. Ist das so sauber und ordentlich, oder birgt das Gefahren? Erscheint mir fast zu einfach. Das Dateisystem weiß doch nix vom darunterliegenden RAID und das RAID nix vom ext4 - also warum beeinflussen sich die beiden gegenseitig? Das macht mich nervös.

Code: Alles auswählen

user@NAStest:~$ sudo lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sda         8:0    0   32G  0 disk
└─sda1      8:1    0   32G  0 part  /
sdb         8:16   0    2T  0 disk
└─sdb1      8:17   0    2T  0 part
  └─md127   9:127  0    2T  0 raid1 /Daten
sdc         8:32   0    2T  0 disk
└─sdc1      8:33   0    2T  0 part
  └─md127   9:127  0    2T  0 raid1 /Daten
sr0        11:0    1 1024M  0 rom
user@NAStest:~$ sudo fdisk -l
Disk /dev/sda: 32 GiB, 34359738368 bytes, 67108864 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xad2dfa36

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 67106815 67104768  32G 83 Linux


Disk /dev/sdb: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xb0cba603

Device     Boot Start        End    Sectors Size Id Type
/dev/sdb1        2048 4294965247 4294963200   2T fd Linux raid autodetect


Disk /dev/sdc: 2 TiB, 2199022206976 bytes, 4294965248 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x86555bea

Device     Boot Start        End    Sectors Size Id Type
/dev/sdc1        2048 4294965247 4294963200   2T fd Linux raid autodetect


Disk /dev/md127: 2 TiB, 2198885892096 bytes, 4294699008 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

mludwig
Beiträge: 794
Registriert: 30.01.2005 19:35:04

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von mludwig » 02.12.2020 14:06:36

Die Größe der Raid-Partition ist jetzt 2 TB, aber das Filesystem ist bestimmt noch 1TB. Es fehlt noch das resizefs aus deinem 1. Beitrag.

Größe des Dateisystems kann man sich ja z. B. mit df -h ansehen (wenn gemountet).

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von Meillo » 02.12.2020 14:36:59

Wenn ich die Manpage lese:
Manpage mdadm(8) hat geschrieben: SIZE CHANGES
Normally when an array is built the "size" is taken from the smallest
of the drives. If all the small drives in an arrays are, one at a
time, removed and replaced with larger drives, then you could have an
array of large drives with only a small amount used. In this situa‐
tion, changing the "size" with "GROW" mode will allow the extra space
to start being used. If the size is increased in this way, a "resync"
process will start to make sure the new parts of the array are synchro‐
nised.

Note that when an array changes size, any filesystem that may be stored
in the array will not automatically grow or shrink to use or vacate the
space. The filesystem will need to be explicitly told to use the extra
space after growing, or to reduce its size prior to shrinking the
array.
Dann hoert das fuer mich so an:

1) Partitionen vergroessern
2) mdadm --grow
3) Dateisystem vergroessern

Praxiserfahrungen habe ich allerdings noch nicht. Sobald ich in diesem Thread sehe, wie man es richtig macht, kann das endlich bei mir auch mal umsetzen (bislang war der Platz noch ausreichend). ;-)
Use ed once in a while!

buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von buhtz » 02.12.2020 17:09:32

Naja, so wie du das beschreibst, dachte ich mir das auch.
Tatsächlich scheint sich der output von lsblk und df zu unterscheiden. Da gibt es bestimmt einen Grund, oder? ;)

Code: Alles auswählen

$ sudo lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sdb         8:16   0    2T  0 disk
└─sdb1      8:17   0    2T  0 part
  └─md127   9:127  0    2T  0 raid1 /Daten

$ df -H
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/md127      1,1T     80M  1,1T    1% /Daten
Ok, resize

Code: Alles auswählen

$ sudo resize2fs /dev/md127
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/md127 is mounted on /Daten; on-line resizing required
old_desc_blocks = 128, new_desc_blocks = 256

The filesystem on /dev/md127 is now 536837376 (4k) blocks long.

$ df -h | grep md
/dev/md127      2,0T     71M  1,9T    1% /Daten
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von Meillo » 02.12.2020 17:20:53

buhtz hat geschrieben: ↑ zum Beitrag ↑
02.12.2020 17:09:32
Naja, so wie du das beschreibst, dachte ich mir das auch.
Tatsächlich scheint sich der output von lsblk und df zu unterscheiden. Da gibt es bestimmt einen Grund, oder? ;)

Code: Alles auswählen

$ sudo lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
sdb         8:16   0    2T  0 disk
└─sdb1      8:17   0    2T  0 part
  └─md127   9:127  0    2T  0 raid1 /Daten

$ df -H
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
/dev/md127      1,1T     80M  1,1T    1% /Daten
Der Grund ist, dass lsblk(1) Informationen ueber (Block-)Devices ausgibt, also die Groesse des *Datentraegers*, und df(1) Informationen ueber (gemountete) Dateisysteme, also die Groesse *Dateisystems*.
Ok, resize

Code: Alles auswählen

$ sudo resize2fs /dev/md127
resize2fs 1.44.5 (15-Dec-2018)
Filesystem at /dev/md127 is mounted on /Daten; on-line resizing required
old_desc_blocks = 128, new_desc_blocks = 256

The filesystem on /dev/md127 is now 536837376 (4k) blocks long.

$ df -h | grep md
/dev/md127      2,0T     71M  1,9T    1% /Daten
Dann ist jetzt ja alles wie es sein soll, oder?


Sehe ich es richtig, dass der Vorgang folgendermassen ablaeuft:
1) Alle (beiden) Members des RAID1 durch welche ersetzen, deren Partitionen die gewuenschte Zielgroesse haben. Ggf. Member aus dem Raid entfernen, umpartitionieren, neu einbinden. Syncen lassen.
2) mdadm --grow /dev/mdXXX --size=max
3) resize2fs /dev/mdXXX

Passt das so?
Use ed once in a while!

debianoli
Beiträge: 4072
Registriert: 07.11.2007 13:58:49
Lizenz eigener Beiträge: MIT Lizenz

Re: RAID 1: Mit größeren Platten ersetzen

Beitrag von debianoli » 02.12.2020 18:21:08

Ja, das funktioniert so. Wobei Schritt 1) anders mehr Sinn macht: Platte 2 1tb aus Raid entfernen. Dann 2TB Platte neu zu Raid hinzufügen und syncen. Jetzt Platte1 entfernen. Nun mit mdamdm Platte vergrößern und danach andere 2TB Platte einfügen. sync.

Jetzt kann man das Dateisystem vergrößern.

Das ganze Spiel funktioniert auch gut mit verschlüsselten Systemen.

Antworten