Problémy s JFS na kořenovém adresáři

Supportní databáze (grimmer_jfs)
Platí pro

SuSE Linux: Verze 7.3

Symptomy:

Naformátovali jste kořenový oddíl na Journaling File System "JFS" od IBM. Při jeho připojování se systém zastaví a začne opakovaně vypisovat:

VFS: Mounted root (jfs filesystem) readonly.
change_root: old root has d_count=2
Trying to unmount old root ... okay
Freeing unused kernel memory: 124k freed
Adding Swap: 128480k swap-space (priority 42)
jfs_dirty inode called on read-only volume
Is remount racy?
jfs_dirty inode called on read-only volume
Is remount racy?
jfs_dirty inode called on read-only volume
Is remount racy?
jfs_dirty inode called on read-only volume
Is remount racy?
jfs_dirty inode called on read-only volume
Is remount racy?
jfs_dirty inode called on read-only volume
Is remount racy?

[...]

Poznámka: Systém se nedostal do nekonečné smyčky! Start bude po určitém čase dál pokračovat.

Příčina:

IBM JFS je (zvláště na Linuxu) velmi "mladým" souborovým systémem a stále se nachází ve vývojové fázi.

Jádro 2.4.10 v SuSE Linuxu 7.3 obsahuje JFS verze 1.0.5, která obsahuje chybu projevující se v případě, že je kořenový adresář při spuštění systému připojen pouze ke čtení. Pokud se pokusíte do kořenového adresáře zapisovat, linuxové jádro označí jednotlivé svazky jako "dirty". Souborový systém se pak neodpojí jako čistý a zapřičiňuje výše zmíněné chybové hlášení. Protože je pro každý soubor vypisována jedna řádka, může tato akce systému trvat i velmi dlouho (zvláště na framebufferové konzoli).

Řešení:

Tento problém je již v novějších verzích JFS odstraněn. Můžete také JFS překompilovat a zavést jako nový modul.

Další možností k odstranění této speciální chyby je použít následující patch na jádro SuSE 2.4.10 (balík kernel-source.rpm).

--- linux-2.4.10.SuSE/fs/jfs/inode.c	Fri Sep 28 10:30:19 2001
+++ linux-2.4.10-suse+/fs/jfs/inode.c	Sun Oct 28 15:27:52 2001
@@ -91,6 +91,9 @@
 	make_bad_inode(inode);
 }
 
+/* This define is from fs/open.c */
+#define special_file(m) (S_ISCHR(m)||S_ISBLK(m)||S_ISFIFO(m)||S_ISSOCK(m))
+
 /*
  * Workhorse of both fsync & write_inode
  */
@@ -98,13 +101,20 @@
 {
 	int rc = 0;
 	int tid;
+	static int noisy = 5;
 
 	jFYI(1, ("In jfs_commit_inode, inode = 0x%p\n", inode));
 
 	if (isReadOnly(inode)) {
-		jERROR(1,("jfs_commit_inode(0x%p) called on read-only volume\n",
-			inode));
-		jERROR(1,("Is remount racy?\n"));
+		/* kernel allows writes to devices on read-only
+		 * partitions and may think inode is dirty
+		 */
+		if(!special_file(inode->i_mode) && noisy) {
+			jERROR(1,("jfs_commit_inode(0x%p) called on "
+				  "read-only volume\n", inode));
+			jERROR(1,("Is remount racy?\n"));
+			noisy--;
+		}
 		return 0;
 	}
 
@@ -176,9 +186,18 @@
 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,4,1)
 void jfs_dirty_inode(struct inode *inode)
 {
+	static int noisy = 5;
+
 	if (isReadOnly(inode)) {
-		jERROR(1,("jfs_dirty inode called on read-only volume\n"));
-		jERROR(1,("Is remount racy?\n"));
+		if(!special_file(inode->i_mode) && noisy) {
+			/* kernel allows writes to devices on read-only
+			 * partitions and may try to mark inode dirty
+			 */
+			jERROR(1,("jfs_dirty_inode called on "
+				  "read-only volume\n"));
+			jERROR(1,("Is remount racy?\n"));
+			noisy--;
+		}
 		return;
 	}
 	/*

Zatím nedoporučujeme používat souborový systém JFS pro kořenový adresář a jako jeho alternativu zvolit jiný žurnálový souborový systém (např. ReiserFS).


Klíčová slova: JFS, KOřENOVá OBLAST, IS REMOUNT RACY, JFS_DIRTY INODE CALLED ON READ-ONLY VOLUME

Kategorie: Startování

SDB-grimmer_jfs, Copyright SuSE Linux AG, Nürnberg, Germany - Verze: 31. Okt 2001
SuSE Linux AG - Poslední změnu: 19. Nov 2001 provedl grimmer (sdb_gen 1.40.0)