Dieser Artikel wurde von Andi (quattro) als Gastartikel eingereicht!
Diese Anleitung beschreibt wie man ein RAID1 auf die neue Festplattensektorgröße von 4K (welche bei einigen Herstellern als Standardsektorgröße für neue Festplatten festgelegt wurde) genau einstellen kann. Für linear und RAID0 sollte aber kein Unterschied bestehen. Die größere Sektorengröße führt zu einer höheren Netto-Kapazität, da pro neuem 4096-Byte-Sektor acht Sync/DAM-Abschnitte, acht Toleranzbereiche sowie acht ECC-Bereiche eingespart werden (Quelle Whitepaper WD ). Laut Western Digital führt die Vergrößerung von 512 Bytes auf 4 KB zu einem Anstieg der Netto-Kapazität zwischen 7% und 11%. An sich könnte dies dem Anwender egal sein, jedoch richtet sich das OS bei Schreibzugriffen nicht nach der physikalischen Sektorgröße. In der Praxis kann dies dazu führen, dass Daten mit einer Dateigröße von mehr als 512 Byte und weniger als 4k so ungünstig auf die Festplatte geschrieben werden, dass diese über zwei 4K-Blöcke verteilt werden. Hierbei kann es zu Performanceproblemen kommen, da die Festplatten die beiden 4K-Blöcke erst lesen und dann beide wieder schreiben muss. Das führt zu einer “Strafrunde” (Read-Modify-Write – RMW), welche durch höhere Zugriffszeiten die Geschwindigkeit erheblich bremst. Für diese Anleitung wurden 2 gleich große
Western Digital EARS*
Platten und ein
Conceptronic CH3MNAS*
mit der (zur Zeit aktuellen) Firmware 1.02b2 verwendet.
Warnhinweis: Diese Anleitung ist für fortgeschrittene Besucher geschrieben, die einzelnen Schritte sollten nur durchgeführt werden, wenn man sich ganz sicher ist. Jeder verwendet diese Anleitung auf eigenes Risiko. Die Daten auf den Festplatten sind nach Befolgen dieser Anleitung weg, erstellt daher ein Backup!
“~#” bezeichnet im folgenden Konsoleneingaben.
FFP auf einem USB-Stick installieren
Das ffp muss laut Anleitung installiert werden. Dieses ist nur für das Geraderichten der Partitionen notwendig und kann danach auch wieder entfernt werden.
Erstmal den Ist-Zustand ansehen und notieren
Partitionen:
~# fdisk -lu
Disk /dev/sda: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units= sectors of 1 * 512=512 bytes
Device Boot Start End Blocks Id System
/dev/sda1 631060289 530113+ 82 Linux swap
/dev/sda2 20884502927621339146276644583 Linux
/dev/sda4 1060290208844951408083 Linux
Partition table entries are not in disk order
Disk /dev/sdb: 1500.3 GB, 1500301910016 bytes
255 heads, 63 sectors/track, 182401 cylinders, total 2930277168 sectors
Units= sectors of 1 * 512=512 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 631060289 530113+ 82 Linux swap
/dev/sdb2 20884502927621339146276644583 Linux
/dev/sdb4 1060290208844951408083 Linux
Partition table entries are not in disk order
Disk /dev/sdc: 2019 MB, 2019557376 bytes
255 heads, 63 sectors/track, 245 cylinders, total 3944448 sectors
Units= sectors of 1 * 512=512 bytes
Device Boot Start End Blocks Id System
/dev/sdc1 633935924196793183 Linux
~# tune2fs -l /dev/md0
tune2fs 1.41.0 (10-Jul-2008)Filesystem volume name:
Last mounted on:
Filesystem UUID: 5523dde6-1b52-4607-b598-d1dba439de65
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: unsigned_directory_hash
Default mount options: (none)Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 357152Block count: 365691584Reserved block count: 0Free blocks: 365627444Free inodes: 357138First block: 0Block size: 4096Fragment size: 4096Reserved GDT blocks: 936Blocks per group: 32768Fragments per group: 32768Inodes per group: 32Inode blocks per group: 2Filesystem created: Wed Sep 29 21:29:15 2010Last mount time: Thu Sep 30 08:01:01 2010Last write time: Thu Sep 30 17:49:18 2010Mount count: 5Maximum mount count: -1
Last checked: Wed Sep 29 21:29:15 2010Check interval: 0()Reserved blocks uid: 0(user root)Reserved blocks gid: 0(group root)First inode: 11Inode size: 256Required extra isize: 28Desired extra isize: 28Default directory hash: tea
Directory Hash Seed: 64fff61f-6680-4632-8912-1e5d68ed2924
Bitte notieren, diese Daten sind wichtig. Am einfachsten grad lokal in einer Textdatei unterbringen.
Vorbereitung
fun_plug wegsichern:
1
2
~# mkdir /mnt/usbstorage/fun_plug_backup
~# cp -a /mnt/HD_a2/fun_plug /mnt/HD_a2/.bootstrap /mnt/usbstorage/fun_plug_backup/
Nun müssen wir die Prozesse beenden, welche viel Arbeitsspeicher brauchen und/oder offene Files auf dem Dateisystem des RAID haben könnten. Ich hatte ftp, den streaming server und itunes nie aktiviert. Es ist wohl klug, diese Sachen zuvor zu deaktivieren (kann man genau an dieser Stelle tun). Samba dreht man so ab:
1
2
3
~# smb stop
$Shutting down SMB services:
$Shutting down NMB services:
~# free
total used free shared buffers
Mem: 618604382818032014704 Swap: 000Total: 618604382818032
Jetzt wirds erst
Ab hier beginnt der Teil mit den permanenten Veränderungen. Wer Angst bekommen hat, schaltet das NAS jetzt ab, zieht den USB-Stick und alles ist wieder beim alten.
Ich habe zum partitionieren parted verwendet. Man kann auch fdisk verwenden, dann allerdings so starten, da es einen Bug gibt:
1
~# cat|fdisk -u /dev/sda
Diesen Teil hier machen wir einmal mit sda und dann mit sdb.
Hier wird parted aufgerufen, die Einheit auf ‘Sektoren’ umgestellt und die aktuelle Partitionstabelle angezeigt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
~# parted /dev/sda
GNU Parted 1.8.8
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s
(parted) print
Model: WDC WD15EARS-00Z5B1 (scsi)Disk /dev/sda: 2930277168s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 63s 1060289s 1060227s primary linux-swap
4 1060290s 2088449s 1028160s primary ext3
2 2088450s 2927621339s 2925532890s primary ext2
(parted)
Was wir hier brauchen sind die Start- und Endsektoren der Partitionen 1 und 2. Start und Ende von #1 sollten überall gleich sein. Wir verändern folgende Werte:
#1 Start: 63 -> 64
#1 Ende: 1060289 (bleibt gleich)
#2 Start: 2088450 (+6) -> 2088456 (2088456 ist durch 8 ganzzahlig teilbar)
#2 Ende: 2927621339 (ebenfalls +6) -> 2927621345 (das ist von der verbauten Platte abhängig)
Vermutlich ist der letzte Sektor beliebig, aber ich hatte keine Lust aus zu probieren was passiert, wenn sich die Größe des RAIDs ändert. Also einfach an das vorhandene Ende eben so viele Sektoren anhängen wie beim Start, dann ist man auf der sicheren Seite. Weg mit den ersten beiden Partitionen:
1
2
(parted) rm 1(parted) rm 2
Die vierte verschieben wir nicht, da hier ohnehin nur ein paar Configfiles des NAS rumliegen und hier nicht so viele Zugriffe sind, als dass man die Western Digital Bremse spüren würde. Wir bauen uns eine neue swap Partition genau an der richtigen stelle:
Der Startsektor hat sich von 63 auf 64 geändert. Der Endsektor bleibt gleich. Und nun noch die große für die Daten:
(Achtung! wenn man ext3 verwendet, gibt man natürlich ext3 an dieser Stelle an)
Nun erstellen wir ein neues Dateisystem darauf. (bei ext3 braucht man noch den Parameter -j dazu). Möchte man das NAS nur zum speichern von großen Dateien (Filme usw.) verwenden, kann man auch noch den Parameter: “-T largefile4” dazunehmen. Das bewirkt, daß weniger Dateien auf dem NAS gespeichert werden können (nur etwa 200.000 pro Terabyte). Möchte man zb. Backups darauf speichern, läßt man das besser weg. Achtung: dies kann nachträglich nicht mehr geändert werden!
~# mke2fs -m 0 /dev/md0
mke2fs 1.41.0 (10-Jul-2008)Filesystem label=OS type: Linux
Block size=4096(log=2)Fragment size=4096(log=2)357152 inodes, 365691584 blocks
0 blocks (0.00%) reserved for the super user
First data block=0Maximum filesystem blocks=011161 block groups
32768 blocks per group, 32768 fragments per group
32 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
102400000, 214990848Writing inode tables: doneWriting superblocks and filesystem accounting information: doneThis filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
Nun habe ich ein wenig gepatzt und vorher nicht nachgesehen, ob diese automatischen Checks aufgedreht waren. Ich habe sie dann abgedreht, weil das nas möglicherweise nicht mehr fertig bootet, wenn es beim booten einen Check machen will.
1
2
3
4
~# tune2fs -c 0 -i 0 /dev/md0
tune2fs 1.41.0 (10-Jul-2008)Setting maximal mount count to -1
Setting interval between checks to 0 seconds
Man kann das Filesystem natürlich jederzeit manuell prüfen. Eine kleine Bitte: Mag bitte jemand seine Dateisystemeinstellungen von vor der Änderung posten? (ich hab leider vergessen mir das an zu sehen)
Nun warten wir, bis das RAID fertig ist. d.h. 3 bis 4 stunden:
Nun kommt der große Moment in dem wir sehen werden ob das nas sein neues untergejubeltes raid akzeptiert:
1
2
3
4
5
6
7
8
9
10
11
12
13
~# raidstop md0
mdadm: stopped /dev/md0
~# raidstart md0
Raid Table Parser version v1.10
Assemble the previously created Raid array.
/tmp/spare_dsk not exist!!!
/tmp/std_raid1 not exist!!!
mdadm: /dev/md0 has been started with 2 drives.
Raid Level Parser version v1.01
mount: wrong fs type, bad option, bad superblock on /dev/md0,
missing codepage or other error
In some cases useful info is found in syslog - try
dmesg | tail or so
Schaut gut aus. Und schon haben wir ein raid in dem die 4k Blöcke des Dateisystems exakt auf den Sektoren liegen.