FS: Ext4
Siehe auch
Ext4 wurde 2006 vorgestellt und ist seit der Version 2.6.19 fester Bestandteil des Linux-Kernels (in RHEL 5.3 war es noch als „Technology Preview“ enthalten). Dateien können hier so gross wie das Dateisystem werden, welches theoretisch selbst bis zu 1024 Petabyte (rund 1 Mio Terabyte) gross sein darf. Dateinamen sind max. 255 Zeichen lang. Pro Verzeichnis sind 65’000 Unterverzeichnisse erlaubt.
Achtung
Wichtig für die Praxis: der Code, um ein Ext4-Dateisystem grösser als 16 TB zu erzeugen, ist Stand 2017-03 nicht stabil - hier sollte man XFS verwenden.
Erfinder der Ext-Dateisystemfamilie und Leiter der Ext4-Entwicklung ist Stand 2017-03 Theodore „Ted“ Ts’o, einer der prominentesten Linux-Kernel-Entwickler. Details zu Ext4 finden sich hier.
Ext4 beginnt mit einem Superblock, in dem sich unter anderem
die Blockgrösse
Anzahl der Blöcke und Inodes
Anzahl der freien Blöcke und Inodes
Mount-Informationen
befinden. Der Rest der Platte wird in Blockgruppen verwaltet. Jede Blockgruppe enthält zu Beginn eine Kopie des Superblocks.
Grössen (Standard):
Block: 4 KB
Blockgruppe: 128 MB
Inode: 256 Bytes
Dateisystem prüfen und reparieren
Ext4-Dateisysteme müssen IMMER im ausgehängten Zustand geprüft werden, demnach also am besten vor dem Neustart. „FSCK“ bedeutet „FileSystem ChecK“. Bis RHEL 6:
touch /forcefsck
reboot
Ab RHEL 7 geht das direkt, inkl. Fortschrittsbalken:
fsck.ext4 -cfty -C 0 /dev/sdxx
Wann sind die letzten Filesystem-Checks gelaufen?
tune2fs -l /dev/sda1 | grep -Ei "mount count|Check interval|Last|Next"
Quota
Für eine neue Disk:
apt install quota
mkfs.ext4 -O quota -E quotatype=usrquota:grpquota:prjquota /dev/vdb
echo '/dev/vdb /data ext4 defaults,usrquota,grpquota,prjquota 0 0' >> /etc/fstab
mkdir -p /data
mount --verbose /dev/vdb
quotacheck --user --group --no-remount /data
quotaon /data
# User-Quota setzen (verwendet $EDITOR)
edquota --user user1
# Spalten:
# 1. blocks: momentane Nutzung
# 2. soft: Soft-Limit für die Blocks
# 3. hard: Soft-Limit für die Blocks
# 4. inodes: momentane Nutzung
# 5. soft: Soft-Limit für die Inodes
# 6. hard: Soft-Limit für die Inodes
# Unlike the hard limit, the soft limit can be exceeded for a certain amount of time. That time is known as the grace period. The grace period can be expressed in seconds, minutes, hours, days, weeks, or months.
# When grace time is over, user is not able to allocate more space/inodes until they free enough of them to get below softlimit.
# Wert 0 = kein Limit
# Wert in kibibytes, K, M, G, T appended
# Gruppen-Quota setzen
edquota --group myusergroup
# Projekt-Quota setzen.
# der eindeutige Projekt-ID einen Namen zuweisen
echo 'test_project1:7' >> /etc/projid
mkdir /data/project1
chattr +P -p 7 /data/project1
edquota --project test_project1
# Grace Period anpassen. Die Grace Period gilt für alle Dateisysteme mit aktivierter Quota
edquota --edit-period --user
edquota --edit-period --group
edquota --edit-period --project
# aktuelle Quota anzeigen lassen
quota --verbose --user user1
quota --verbose --group myusergroup
quota --verbose --project myproject
# Report / Übersicht anzeigen lassen
repquota --human-readable --user /data
repquota --human-readable --group /data
repquota --human-readable --project /data
Die verschiedenen Quotas (User, Gruppen, Projekt) sind komplett voneinander getrennt:
Die User-Quota zählt alle Files, die dem User gehören (anhand von den File Permissions).
Die Gruppen-Quota zählt alle Files, die der Gruppe gehören (anhand von den File Permissions).
Die Projekt-Quota zählt alle Files, die in den Projekt-Ordnern sind (anhand von den File Attributes).
- Was passiert, wenn die User-Quota (1G soft, 1.5G hard) aufgebraucht ist, aber die Gruppen-Quota (2G soft, 2.5G hard) noch nicht?
fallocate -l 1200M test_file1 # vdb: warning, user block quota exceeded. fallocate -l 1200M test_file2 # vdb: write failed, user block limit reached. # fallocate: fallocate failed: Disk quota exceeded # only wrote 300M, filling up the hard limit of 1500M
Das heisst, die niedrigere der beiden Quotas gilt.
- Was passiert, wenn die Gruppen-Quota (1G soft, 1.5G hard) aufgebraucht ist, aber die User-Quota (2G soft, 2.5G hard) noch nicht?
Genau das gleiche Verhalten wie beim umgekehrten Szenario. Allerdings kann die Nutzung der Gruppen-Quota reduziert werden, indem das Ownership der Datei geändert wird:
chgrp myusergroup test_file1 fallocate -l 1200M test_file2
Somit kann auch die 2te 1.2G Datei angelegt werden, da
test_file1
jetzt nicht mehr zu deruser1
Gruppen-Quota zählt.- Was passiert, wenn für
user1
unduser2
User-Quotas gesetzt sind und via ACL beide Benutzer Zugriff auf der Datei haben? Die Datei zählt nur zu der Quota des Besitzers. Gruppen-ACls verhalten sich gleich. ACLs haben also keinen Einfluss auf die Quota.
- Zu welchen Quotas zählen Dateien in Projekt-Ordnern?
Zu allen zutreffenden Quotas, also zur User-, Gruppen- sowie Projekt-Quota. Wie immer, gilt die niedrigere Quota.
- Gelten gesetzte Quotas für alle Mountpoints / Filesysteme?
Nein.
edquota
erlaubt es, pro Filesystem eine Quota zu vergeben.- Was ist die beste Vorgehensweise beim Setzen von Quotas für die Home-Verzeichnisse?
Für die Anwendung ist es am sinnvollsten, eine User-Quota pro Benutzer für das
/
oder/home
Filesystem zu setzen.- Was ist die beste Vorgehensweise beim Setzen von Quotas für die eine shared Daten-Partitionen?
Hier empfiehlt es sich, nur Projekt-Quotas zu verwenden und den Zugriff über File Permissions zu regeln. Das Konzept ist einfach und für Endnutzer verständlich. Zum Beispiel:
# only root is allowed to create new project folders chmod 0755 /data # first project: only user1 is allowed mkdir /data/project1 chown -R user1:user1 /data/project1 echo 'project1:1' >> /etc/projid chattr +P -p 1 /data/project1 edquota --project project1 # second project: myusergroup is allowed mkdir /data/project2 chown -R user1:myusergroup /data/project2 # make sure that the group always has rwx permissions and that this gets applied to new files setfacl --recursive --modify group:myusergroup:rwx /data/project2 setfacl --recursive --default --modify group:myusergroup:rwx /data/project2 # make sure the project-id is unique # human-readable-name:project-id echo 'project2:2' >> /etc/projid # add folder to project with ID 2 chattr +P -p 2 /data/project2 # double check the project ID lsattr -p /data # set the quota for the project edquota --project project2 # check the quotas repquota --human-readable --project /data
Built on 2024-11-18