From: Michael Tokarev <mjt@tls.msk.ru>
To: Pavel Machek <pavel@suse.cz>
Cc: Kay Sievers <kay.sievers@vrfy.org>,
Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: data corruption: revalidating a (removable) hdd/flash on re-insert
Date: Wed, 05 Nov 2008 00:22:51 +0300 [thread overview]
Message-ID: <4910BD2B.1020808@msgid.tls.msk.ru> (raw)
In-Reply-To: <20081104202011.GA7135@ucw.cz>
Pavel Machek wrote:
>>>> Every access to removable media is guarded by this revalidation check.
>>>> If you don't see these events, you should not trust this reader, and
>>>> at least never change the media while it is connected.
>>> This is rather nasty data-corrupter.
>> Sure, it is.
>>
>>> Could we at least blacklist
>>> broken device, and force revalidation on each close or something like
>>> that?
>> What's your idea of revalidation if the hardware does not tell you?
>> Get an md5 of the disk content? :)
>
> Well... you should not eject media while fs is mounted or blockdev is
> open, correct?
>
> So can we simply claim 'media changed' on last close/unmount? Sure,
> sometimes media was not changed, but that only hurts performance, not
> correctness... ?
Well, that's what my tiny proggy, which I used here to work around the
problem, does. It constantly opens/closes the /dev/sdFOO, every 0.5s
currently (I don't think I will be able to replace a media faster than
half a second :), in order to catch REMOVALs of media -- because when
the drive does not see the media anymore, it correctly reports that
the media has changed...
I tried to make it to detect CLOSE of the file (either by userspace or
by kernel on umount), to not waste time when the drive is open/mounted
as it can't be revalidated anyway, but neither dnotify nor inotify is
helpful here.
What is needed is to force "invalidation" on last close, so that on
next open, kernel thinks it's a shiny new media, never seen before.
Ie. to force-flush caches, or something like that. Sure this is not
as good as my program, which still leaves caches in case media was
NOT removed. But my approach is wasteful. And the data corruption
is indeed quite bad (we've lost whole gig of photos this way already).
But yes, looks like this problem becomes less and less of an issue.
So for me, it's easy to deal with (not perfect but it works; it'd be
even better if i will be able to wait for umount using inotify, to
only wake when really needed), and the real solution is to not use
cheap broken hardware... (My unit was about $15, real ones costs
$25 or so, but that's not the reason I've got it. Real reason was
that it was only once than I actually saw such a thing, and it was
the last one as well... ;)
Thanks!
/mjt
next prev parent reply other threads:[~2008-11-04 21:23 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-31 15:38 data corruption: revalidating a (removable) hdd/flash on re-insert Michael Tokarev
2008-10-31 15:59 ` Lennart Sorensen
2008-10-31 16:10 ` Michael Tokarev
2008-10-31 18:28 ` Lennart Sorensen
2008-10-31 16:10 ` Kay Sievers
2008-10-31 17:39 ` Michael Tokarev
2008-10-31 18:49 ` Kay Sievers
2008-11-04 19:57 ` Pavel Machek
2008-11-04 20:13 ` Kay Sievers
2008-11-04 20:20 ` Pavel Machek
2008-11-04 21:22 ` Michael Tokarev [this message]
2008-11-04 21:28 ` Pavel Machek
2008-11-05 8:04 ` Michael Tokarev
2008-11-05 0:29 ` Kay Sievers
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=4910BD2B.1020808@msgid.tls.msk.ru \
--to=mjt@tls.msk.ru \
--cc=kay.sievers@vrfy.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@suse.cz \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox