tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: [GSoC 2013] Defragmentation for FFS
On 07/24/13 12:46, Alan Barrett wrote:
Does the defragmentation takes place while the file system is
mounted and in use by other processes?
No. This would have been too risky for a successful GSoC project.
But, I bear in mind while coding and designing, to keep things
extensible for an online defrag version.
I have not many technical toughs about the online version yet. Expect
that some black magic has to be done, to redirect the I/O operations to
the main memory, or other free parts on the hard disk. To my
understanding, VFS has no support for things like that. So this will be
hard.
However, I am prepared to work on that in another project. Maybe for
another GSoC, a university project, just out of interest (when time
allows), or even as paid job (which I don't expect).
If I start a defragmentation operation, and then kill it (or the machine
crashes) before the operation completes, and then I start it again, and
it is killed before completion again, will it eventually complete? From
your description, I guess that if it is killed during the analysis phase
then it will not make any progress, but if it is killed during the later
phases then it will make progress.
Exactly. When it crashes during the analysis part, the analysis data is
lost. I thought about saving it for a moment, but this would not make
sense. There is no guarantee, that it has not been mounted, or changed
in the meantime. The other (and more important) point is a fresh
analysis just does not detect the blocks that have already been done,
because they are already fine.
When it crashes during a later phase, it depends on the exact moment of
the crash. My idea is like following:
1. Set the fs_clean to false.
2. copy data blocks
3. update metadata
4. flush to disk
5. Set fs_clean to true
6. continue with the next data move operation, i.e. goto 1.
When a crash happens during 1., well this is easy.
during 2: no harm, there are just some wrong blocks
during 3:
this is a bigger problem, however, when the system crashes during a
rename(2) call, there is a way to do it, such that fsck can fix it. I'll
probably will take the same way (something soft-update like). Although I
have not looked into that in detail yet.
4. Also here, I'll look into what soft-updates do, to guarantee
something fixable.
So when it crashes, you either have to restart the analysis part, or do
an fsck(8) and start it again. My tool strictly refuses to work on
non-clean filesystems.
Manuel
Home |
Main Index |
Thread Index |
Old Index