From: Zheng Liu <gnehzuil.liu@gmail.com>
To: Gordon Messmer <gordon.messmer@gmail.com>
Cc: linux-ext4@vger.kernel.org
Subject: Re: kernel panic using external journal and snapshots
Date: Fri, 22 Nov 2013 15:11:45 +0800 [thread overview]
Message-ID: <20131122071145.GA5936@gmail.com> (raw)
In-Reply-To: <5281A8A3.80604@gmail.com>
Hi Gordon,
On Mon, Nov 11, 2013 at 08:03:47PM -0800, Gordon Messmer wrote:
> I'm developing backup infrastructure for Linux using snapshots. One
> of the supported configurations is EXT4 on LVM, but I think I've
> come across a bug.
>
> I'm currently testing on CentOS 6, with kernel 2.6.32-358.6.1.el6.x86_64
>
> If I create a snapshot of a filesystem with an external journal, and
> mount that snapshot while the original filesystem is mounted, the
> system will usually kernel panic. If it does not panic, then the
> kernel will later refuse to mount it because "External journal has
> more than one user." So, the first bug seems to be that ext4
> doesn't check the external journal before mounting the new snapshot
> to ensure that the journal is not in use. Expected behavior is that
> the kernel would refuse to mount a filesystem whose journal already
> has a "user" in order to prevent a kernel panic.
>
> If that were the extent of the problem, I probably wouldn't bother
> reporting the issue. However, the kernel will STILL panic if I use
> tune2fs to remove the journal, and even if I use tune2fs to create a
> new internal journal. The second bug, then, seems to be that once
> an ext4 filesystem has an external journal, that journal will
> continue to be used after it has been removed, and even if it is
> replaced with an internal journal.
>
> The following commands were used to test the problem. These are
> basically the commands run by the "snapshot" application. It sets a
> minimum snapshot size of 10% of the volume size, then reads the size
> of the volume and the size remaining in the volume group. It
> creates a uuid for the snapshot name, then creates the new snapshot.
> I use tune2fs first to verify that there is a journal device
> recorded, then remove the journal. Afterward, I read the value
> again and find no external journal recorded. When the filesystem is
> mounted, the kernel will usually panic.
>
> Is this a known bug? I haven't yet built a newer system to test the
> effects on the current kernel version.
>
> min_size=10
> lvsize=$(lvs --noheadings --units m --nosuffix -o lv_size
> "VolGroup/lv_var" | cut -f1 -d.)
> vgfree=$(vgs --noheadings --units m --nosuffix -o vg_free
> "/dev/VolGroup" | cut -f1 -d.)
> test "$vgfree" -gt $(( $lvsize * $min_size / 100 )) || echo Not
> enough free space on "/dev/VolGroup" for snapshot
> uuid=$(uuidgen)
> lvcreate -s -n "lv_var-snap-${uuid}" -L "$(( $lvsize * $min_size /
> 100 ))"m "VolGroup/lv_var"
> Rounding up size to full physical extent 128.00 MiB
> Logical volume
> "lv_var-snap-66c41691-21c0-4db2-8af2-09a13d87a881" created
> tune2fs -l "/dev/VolGroup/lv_var-snap-${uuid}" | grep "^Journal device:"
> Journal device: 0xfd04
> tune2fs -O ^has_journal "/dev/VolGroup/lv_var-snap-${uuid}"
> tune2fs 1.41.12 (17-May-2010)
> Journal removed
> tune2fs -l "/dev/VolGroup/lv_var-snap-${uuid}" | grep "^Journal device:"
> mount "/dev/VolGroup/lv_var-snap-${uuid}" /mnt
> * kernel panic *
>
>
> https://bitbucket.org/gordonmessmer/dragonsdawn-snapshot
For the first question, I haven't a LVM device on my hand. Hence I am
not sure whether there is a bug or not.
For the second one, I do a test on my sand box against Linux-3.12-rc5,
and it works well. So I think maybe you can try it again on a newer
kernel.
Regards,
- Zheng
next prev parent reply other threads:[~2013-11-22 7:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-12 4:03 kernel panic using external journal and snapshots Gordon Messmer
2013-11-22 7:11 ` Zheng Liu [this message]
2013-11-23 20:30 ` Gordon Messmer
2013-11-25 3:32 ` Zheng Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131122071145.GA5936@gmail.com \
--to=gnehzuil.liu@gmail.com \
--cc=gordon.messmer@gmail.com \
--cc=linux-ext4@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.