From: Jakob Oestergaard <jakob@unthought.net>
To: linux-kernel@vger.kernel.org
Subject: Disk (block) write strangeness
Date: Mon, 5 Aug 2002 20:49:21 +0200 [thread overview]
Message-ID: <20020805184921.GC2671@unthought.net> (raw)
Hello all,
While investigating how various disks handle power-loss during writes, I
came across something *very* strange.
It seems that
*) Either the disk writes backwards (no I don't believe that)
*) Or the kernel is writing 256 B blocks (AFAIK it can't)
*) The disk has some internal magic that cause a power-loss during
a full block write to leave the first half of the block intact with
old data, and update the second half of a block correctly with new
data. (And I don't believe that either).
The scenario is: I wrote a program that will write a 50 MB block with
O_SYNC to /dev/hdc. The block is full of 32-bit integers, initialized
to 0. For every full block write (the block is written with one single
write() call), the integers are incremented once.
So first I have 50 MB of 0's. Then 50 MB of 1's. etc.
During this write cycle, I pull the power cable. I get the machine
back online and I dump the 50 MB block.
What I found was a 50 MB block holding:
11668992 times "0x00000002"
231168 times "0x00000003"
1174528 times "0x00000002"
32512 times "0x00000003"
Please note that 32512 is *not* a multiple of 512. And please note that
the 3's are written *after* the 2's, so actually there is a 512 byte
block on the disk which contains 2's in the first half, and 3's in the
second half!
How on earth could that happen ?
Why does the kernel not write from beginning to end ? Or why doesn't
the disk ?
And does the elevator cause the writes to be shuffled around like that -
I would have expected the kernel to write from beginning to end every
single time...
The kernel is 2.4.18 on some i686 box
The disk is a Quantum Fireball 1GB IDE (from way back then ;)
The IDE chipset is an I820 Camino 2
I can submit the test program or do further tests, if anyone is
interested.
Thank you,
--
................................................................
: jakob@unthought.net : And I see the elder races, :
:.........................: putrid forms of man :
: Jakob Østergaard : See him rise and claim the earth, :
: OZ9ABN : his downfall is at hand. :
:.........................:............{Konkhra}...............:
next reply other threads:[~2002-08-05 18:45 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-08-05 18:49 Jakob Oestergaard [this message]
2002-08-05 20:17 ` Disk (block) write strangeness Alan Cox
2002-08-05 19:07 ` Jakob Oestergaard
2002-08-06 14:44 ` Kasper Dupont
2002-08-07 8:14 ` Helge Hafting
2002-08-07 11:43 ` Itai Nahshon
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=20020805184921.GC2671@unthought.net \
--to=jakob@unthought.net \
--cc=linux-kernel@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.