Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 01 Dec 2006 18:54:47 -0800
From:      Garrett Cooper <youshi10@u.washington.edu>
To:        freebsd-questions@freebsd.org
Subject:   Re: Soft Updates Help
Message-ID:  <4570EAF7.4060400@u.washington.edu>
In-Reply-To: <20061201203509.444401d9.wmoran@collaborativefusion.com>
References:  <4570C4D6.5030708@calarts.edu> <20061201203509.444401d9.wmoran@collaborativefusion.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Bill Moran wrote:
> Sean Murphy <smurphy@calarts.edu> wrote:
>> I have read up on soft updates and have some questions.
>>
>> The way that I am understanding soft updates purpose is to allow file 
>> systems to be mounted dirty after an unclean shutdown of the system.
> 
> That's not the purpose.  The purpose is to improve performance by taking
> advantage of delayed writes much the way an asynchronous filesystem does,
> while preventing horrendous data corruption by ordering those writes, much
> the way a journalling filesystem does.
> 
> The fact that you can generate filesystem snapshots is a side-benefit.  The
> fact that you can use filesystem snapshots to validate the filesystem after
> it's been mounted is a further side-benefit.
> 
>> If this is a safe way to restore consistency why is it not used on /?
> 
> Because writes are delayed, it's possible for data to be lost in the event of
> a crash -- it acts like a database, either the entire transaction is committed
> or it's rolled back, either way, the data is guaranteed not to be corrupt.
> 
> Also, on heavily used filesystems, softupdates can lead to the filesystem
> temporarily having less space available than it really does.  I.e. you update
> /kernel, softupdates completely replaces the file with a new one, but the
> blocks for the old file haven't been reclaimed yet.  For a short period, you
> might have 1 kernel file, but there's 2x that being allocated for it.
> 
> For these two reasons, / is traditionally _not_ mounted with softupdates
> enabled, since it's critical to system startup.
> 
>> If a file system is not heavily written to is it better not to use soft 
>> updates?
> 
> Weigh the good vs. the bad:
> *) synchronous mounted filesystem is almost guaranteed to keep your data safe
>    at all times, but is abysmally slow.
> *) softupdates _may_ lose some data if your system crashes before all writes
>    are flushed, but will never _corrupt_ it.  Additionally, you get a LOT
>    better speed.
> *) Asynchronous is a little faster than softupdates, but it's damn near
>    guaranteed to be corrupt in the event of a crash.
> 
>> When file systems are mounted dirty and our being used while the 
>> backgound fsck is running on the file systems how does it prevent files 
>> from being lost?
> 
> It doesn't.  It guarantees that your filesystem will always be mountable and
> never corrupt, but it doesn't guarantee against data loss.
> 
> Here's a simplified example:
> Let's say you're saving a big file and the power goes out.  When the power comes
> back on, there are basically 3 states that file can be in:
> A) It was fully written to disk -- you got lucky.
> B) Nothing had been written to disk yet -- "data loss"
> C) It was partially written to disk -- your filesystem is corrupt, you either
>    need to allow a filesystem repair program to fix it (fsck -- or chkdsk on
>    Windows, for example) or you'll have weird problems with it until you do so.
> 
> Softupdates guarantees against C.  It does this by (essentially) writing the
> file "backwards":
> 1) it writes all the data to data blocks, and once that's done
> 2) _then_ it creates a directory entry for the file.
> 
> If the system crashes between #1 and #2, it looks like B happened, but you never
> get in scenario C where the filesystem is corrupt and gets more corrupt as you
> continue to use it.  Instead, when fsck runs (in the background) it realizes
> that there are data blocks in use that don't belong to any file, and it can
> free them up for the filesystem to use.
> 
> That's somewhat simplified, but it gives you the basic idea.
> 
> HTH
> Bill

	Just for future reference, a more brief-although not 
complete-explanation of softupdates can be found on Wikipedia 
<http://en.wikipedia.org/wiki/Softupdates>.
	The article does link some other documents which discuss softupdates in 
more detail though. From what I skimmed it appears that the documents 
describe softupdates as a system, but perhaps not all of the features 
that you are looking for (asynchronous softupdating, for instance).
-Garrett



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4570EAF7.4060400>