= Running fsck on Large Paritions in FreeBSD =
If you need to run ''fsck'' on a large FreeBSD partition, you might have a bit of trouble. fsck needs a fair bit of memory to do its work, and if you don't have enough, you'll run into difficulties getting to to complete. Here are some steps to help get fsck to run:
== The Error Messages ==
If fsck runs out of memory, you'll see something like
fsck_ufs: cannot alloc 30326 bytes for inoinfo
or
fsck_ufs: cannot increase directory list
== The Fix ==
You need to tell the kernel that it can use more memory for a single process than it otherwise could. This is accomplished by setting ''kern.maxdsiz'' in ''/boot/loader.conf''. By default, this 'datasize' value is set at half the installed RAM size:
[root@bergen ~]# limits
Resource limits (current):
cputime infinity secs
filesize infinity kB
datasize 524288 kB
stacksize 65536 kB
coredumpsize infinity kB
memoryuse infinity kB
memorylocked infinity kB
maxprocesses 1789
openfiles 3578
sbsize infinity bytes
vmemoryuse infinity kB
In ''/boot/loader.conf'', you'll want to add:
kern.maxdsiz="2684354560" # 2.5GB
What values you use are up to you, but the general rule of thumb is that you need [[http://groups.google.com/group/lucky.freebsd.stable/msg/4f1dcc954ecb7392|1GB for every 1TB of partition that is filled with data.]] In my experience on FreeBSD 6.3, the actual number seems to be a little less than that, as I was able to ''fsck'' a 3.5TB filesystem with 2.5GB allocated.
**If you have extra RAM sitting around, install it.** ''fsck'' can use swap space, but that makes it run //really// slowly, and it is best if it can keep its data in RAM. The more RAM you have, the better.
== The 4GB (32-bit) Limit ==
There is one other limit to worry about. If you're using the 32-bit ''i386'' version of FreeBSD, your system cannot by default access more than 4GB of RAM, as that is the limit of the 32-bit address space. If you set ''kern.maxdsiz'' at, beyond, or even close to ''4294967296'', your system may crash on boot or during ''fsck''. Supposedly, recompiling your kernel with PAE extensions can fix this, but I've yet to try it.
If you accidentally set the limit too high, you can unset it via the boot loader:
* When the FreeBSD boot menu comes up, say 'Escape to Boot Prompt'
* Type ''unset kern.maxdsiz''
* Type ''boot''