UFS und extragroße LUNs (größer als 2 TeraByte)

Mit Solaris 9 8/03 (SPARC 64-bit) wurde für UFS ein Filesystem Limit von 16 TB eingeführt (vorher 1 TB). Die Einschränkung auf 64-bit SPARC Systeme wurde mit Solaris 10 auf 64-bit X86 Systeme erweitert. Das Root-FS darf jedoch die Größe von 1 TB weiterhin nicht überschreiten. Für alle Benutzer eines älteren Solaris-Standes ist es nicht zu empfehlen, Disk-Devices dieser Größe einzusetzen! Da im professionellen Rechenzentrum die Kapazitäten aber schon lange in Bereiche jenseits der TB-Grenze gehen, wollte OSL testen, wie sich diese LUNs/Volumes im täglichen Umgang "anfühlen" und wie lange typische Tätigkeiten (wie newfs, fsck) für Volumes dieser Größe dauern.

Zu diesem Zweck wurde ein LUN mit ca. 5 TB auf einem RAID-System erstellt und mittels OSL Storage Cluster (ab Load 39) für Solaris verfügbar gemacht. Als Testbetriebssystem wurde Solaris 10 Update 2 X86 verwendet. Der Host ist eine SunFire X2200 M2. Das VTOC der Platte (ohne Filesystem) wurde ausgelesen:

 

# prtvtoc /dev/rdsk/c4t207000C0FF0A5ECFd0s0
* /dev/rdsk/c4t207000C0FF0A5ECFd0s0 partition map
*
* Dimensions:
*     512 bytes/sector
* 10744142463 sectors
* 4001724 accessible sectors
*
* Flags:
*   1: unmountable
*  10: read-only
*
*                          First     Sector    Last
* Partition  Tag  Flags    Sector     Count    Sector  Mount Directory
       1     15    01         34   3985339   3985372
       8     11    00    3985373     16384   4001756

 

Die Größe der LUN ist mit 10744142463 Sektoren (512 Byte/Sektor) angegeben. Das entspricht also genau 5 TB.
Dieses Volume wurde als OSL Physical Volume initialisiert, um dann ein Application Volume darauf zu erstellen. Darauf wurde dann ein "newfs" abgesetzt und mit "time" die Zeit gestoppt.

 

#  time newfs /dev/av0/rbla
newfs: /dev/av0/rbla last mounted as /mnt
newfs: construct a new file system /dev/av0/rbla: (y/n)? y
Warning: 2048 sector(s) in last cylinder unallocated
/dev/av0/rbla:  10737418240 sectors in 1747627 cylinders of 48 tracks, 128 sectors
        5242880.0MB in 12222 cyl groups (143 c/g, 429.00MB/g, 448 i/g)
super-block backups (for fsck -F ufs -o b=#) at:
 32, 878752, 1757472, 2636192, 3514912, 4393632, 5272352, 6151072, 7029792,
 7908512,
Initializing cylinder groups:
...............................................................................
...............................................................................
...............................................................................
.......
super-block backups for last 10 cylinder groups at:
 10729372192, 10730250912, 10731129632, 10732008352, 10732887072, 10733765792,
 10734644512, 10735523232, 10736401952, 10737280672

real    2m14.837s
user    0m18.598s
sys     0m0.720s

 

Das Anlegen des Filesystems hat etwa 2 Minuten und 15 Sekunden gedauert. Als nächster Schritt wurden diverse Dateien (gemischt groß und klein) in das gemountete Filesystem hineinkopiert. Dann wurde ein Filesystem-Check mit "fsck" angestoßen und wieder mit "time" die Zeit gemessen. Etwa 52 % des Volumes waren mit diesen Dateien ausgenutzt.

 

# time fsck -y /dev/av0/rbla
** /dev/av0/rbla
** Last Mounted on /mnt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3a - Check Connectivity
** Phase 3b - Verify Shadows/ACLs
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cylinder Groups
2172458 files, 345636535 used, 325529890 free (0 frags, 325529890 blocks, 0.0% fragmentation)

real    55m22.34s
user    2m3.41s
sys     0m13.55s

 

Der Filesystem Check dauerte ca. 55 Minuten bei etwa 2 Millionen Files. Nun wurden 5 große Files (7 % genutzt) auf das gemountete Volume gespielt und wieder ein "fsck" abgesetzt:

 

# time fsck -y /dev/av0/rbla
** /dev/av0/rbla
** Last Mounted on /mnt
** Phase 1 - Check Blocks and Sizes
** Phase 2 - Check Pathnames
** Phase 3a - Check Connectivity
** Phase 3b - Verify Shadows/ACLs
** Phase 4 - Check Reference Counts
** Phase 5 - Check Cylinder Groups

FILE SYSTEM STATE IN SUPERBLOCK IS WRONG; FIX?  yes

7 files, 41282247 used, 629910130 free (0 frags, 629910130 blocks, 0.0% fragmentation)

real    8m39.90s
user    2m56.19s
sys     0m2.06s

 

Diesmal wurden 8 Minuten und 40 Sekunden für den "fsck" benötigt.

Fazit

Die Benutzung von extra großen Volumes (größer als 2 TB) ist mit Solaris 64-bit kein Problem. Es sollte jedoch darauf geachtet werden, dass das System unter Solaris 10 läuft, um eventuell noch vorhandene Probleme mit Solaris 9 zu umgehen. Solaris 8 oder Solaris 7 sollten bei diesen Volumegrößen nicht benutzt werden, da UFS bei diesen Versionen noch auf 1 TB limitiert ist.

Unter Solaris 10 64-bit ist das Handling wie bei kleineren Volumes völlig unkompliziert. Die Geschwindigkeit des "newfs" ist mit etwa 2 Minuten bei einer 5 TB LUN im erträglichen Bereich. Ein "fsck" kann bei vielen Files schon mehrere Stunden in Anspruch nehmen, dies ist aber aufgrund der auftretenden Häufigkeit solcher Aufgaben in Ordnung, so dass dieser Punkt nicht störend ins Gewicht fällt.