• Eric Sandeen's avatar
    ext3: allow specifying external journal by pathname mount option · cf7eff46
    Eric Sandeen authored
    It's always been a hassle that if an external journal's
    device number changes, the filesystem won't mount.
    And since boot-time enumeration can change, device number
    changes aren't unusual.
    
    The current mechanism to update the journal location is by
    passing in a mount option w/ a new devnum, but that's a hassle;
    it's a manual approach, fixing things after the fact.
    
    Adding a mount option, "-o journal_path=/dev/$DEVICE" would
    help, since then we can do i.e.
    
    # mount -o journal_path=/dev/disk/by-label/$JOURNAL_LABEL ...
    
    and it'll mount even if the devnum has changed, as shown here:
    
    # losetup /dev/loop0 journalfile
    # mke2fs -L mylabel-journal -O journal_dev /dev/loop0
    # mkfs.ext3 -L mylabel -J device=/dev/loop0 /dev/sdb1
    
    Change the journal device number:
    
    # losetup -d /dev/loop0
    # losetup /dev/loop1 journalfile
    
    And today it will fail:
    
    # mount /dev/sdb1 /mnt/test
    mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
           missing codepage or helper program, or other error
           In some cases useful info is found in syslog - try
           dmesg | tail  or so
    
    # dmesg | tail -n 1
    [17343.240702] EXT3-fs (sdb1): error: couldn't read superblock of external journal
    
    But with this new mount option, we can specify the new path:
    
    # mount -o journal_path=/dev/loop1 /dev/sdb1 /mnt/test
    #
    
    (which does update the encoded device number, incidentally):
    
    # umount /dev/sdb1
    # dumpe2fs -h /dev/sdb1 | grep "Journal device"
    dumpe2fs 1.41.12 (17-May-2010)
    Journal device:	          0x0701
    
    But best of all we can just always mount by journal-path, and
    it'll always work:
    
    # mount -o journal_path=/dev/disk/by-label/mylabel-journal /dev/sdb1 /mnt/test
    #
    
    So the journal_path option can be specified in fstab, and as long as
    the disk is available somewhere, and findable by label (or by UUID),
    we can mount.
    Signed-off-by: default avatarEric Sandeen <sandeen@redhat.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    cf7eff46
super.c 84.9 KB