Linux: Create Partition larger than 2TB

Die Zeiten kleiner Festplatten ist schon lange vorbei, schon vor einiger Zeit schrieb ich darueber, aber finde es nicht so recht im eigenen Blog wieder, deswegen nochmal ein eigener Post dazu. Wichtig ist, dass man mit parted und nicht mit fdisk arbeitet, weil man GPT benoetigt und fdisk das nich kann. Deswegen erstmal parted installieren wenn es noch nicht geschehen ist:

root@desktop:~# aptitude install parted

und dann die Partition anlegen:

root@desktop:~# parted /dev/vda
GNU Parted 2.2
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
Warning: The existing disk label on /dev/vda will be destroyed and all data on this disk will be lost. Do you want to
continue?
Yes/No? yes
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 5369GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
 
Number  Start  End  Size  File system  Name  Flags
(parted) unit TB
(parted) mkpart primary 0.00TB 5.37TB
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 5.37TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
 
Number  Start   End     Size    File system  Name     Flags
1      0.00TB  5.37TB  5.37TB  ext4         primary
(parted) quit
Information: You may need to update /etc/fstab.
 
root@desktop:~#

zum Schluss Dateisystem erzeugen und fstab anpassen…

Howto: Convert Ext2 to Ext3 to Ext4

Wie schoen ist es doch, dass man sein vor 15 Jahren angelegtes Dateisystem relativ einfach aktualisieren kann.
Interessant ist das ganze wenn man an die Grenzen des jeweiligen Dateisystems stoesst, wie z.B. die Dateigroessengrenze von 2Tebibyte bei ext2, oder die bei ext2 und ext3 gleiche Begrenzung von ~32000 Unterordnern pro Verzeichnis.
Die Konvertierung ist hier anhand eines simplen Beispiels einmal durchgespielt. Dafuer legen wir uns eine 50MB grosse Containerdatei an, in der ein Dateisystem erzeugt wird und wir dann die Konvertierung vornehmen.

Als erstes legen wir die Containerdatei an und binden diese unter /dev/loop0 als loop device ein:

$ dd if=/dev/urandom of=testfile bs=1M count=50
$ losetup /dev/loop0 testfile

Nun muss eine Partition in dem Container angelegt werden, z.B. mit fdisk:

$ fdisk /dev/loop0
n p 1 enter w

Danach legen wir ein Ext2 Dateisystem darin an, mounten dieses, erstellen darin eine Datei gucken das wir sie lesen koennen und haengen es wieder aus:

$ mkfs.ext2 /dev/loop0
$ echo foo >> /mnt/bar
$ cat /mnt/bar 
bar
$ mount | grep loop0
/dev/loop0 on /mnt type ext2 (rw)
$ umount /mnt

Jetzt konvertieren wir das Dateisystem zu einem Ext3, haengen es ein, gucken ob wir die Datei noch lesen koennen und haengen es wieder aus:

$ tune2fs -j /dev/loop0
$ mount /dev/loop0 /mnt/
$ cat /mnt/bar
foo
$ mount | grep loop0
/dev/loop0 on /mnt type ext3 (rw)
$ umount /mnt

Hat geklappt! Zuletzt bringen wir das Dateisystem auf Ext4 und probieren das gleiche nochmal wie bei den vorherigen Schritten:

$ tune2fs -O extents,uninit_bg,dir_index /dev/loop0
$ e2fsck -fDC0 /dev/loop0
$ mount /dev/loop0 /mnt
$ cat /mnt/bar
foo
$ mount | grep loop0
/dev/loop0 on /mnt type ext4 (rw)
$ umount /mnt

Und aufraeumarbeiten:

$ losetup -d /dev/loop0
$ rm testfile