[howto] nanobsd custom compact flash image size
-
Here is how I managed to install pfSense using a larger Compact Flash card. You can use any size CF and use its all sectors.
I'm quite new to pfSense and freeBSD so this might not be the best procedure but it worked for me and I wanted to share it.PfSense version: nanobsd vga 2.0.2
Target Box: alix 3d3
support pc: freebsd 9.1Get CF sector size:
freebsd# dmesg | grep -e '^da0:' | grep sectors
da0: 7647MB (15662304 512 byte sectors: 255H 63S/T 974C)Calc slices size (see footer example script)
start size slice
63 7779681 da0s1
7779744 63
7779807 7779681 da0s2
15559488 102816 da0s3make mount dirs
freebsd# mkdir /mnt/nanobsd
freebsd# mkdir /mnt/nanobsd-conf
freebsd# mkdir /mnt/cf-s1a
freebsd# mkdir /mnt/cf-s3Get and mount pfSense image (here the source is a 512M image)
freebsd# wget http://files.nl.pfsense.org/mirror/downloads/pfSense-2.0.2-RELEASE-512mb-i386-nanobsd[_vga].img.gz
freebsd# gunzip pfSense-2.0.2-RELEASE-512mb-i386-nanobsd.img.gz
freebsd# mdconfig -a -t vnode -f pfSense-2.0.2-RELEASE-512mb-i386-nanobsd[_vga].img -u 1
freebsd# mount /dev/md1s1a /mnt/nanobsd
freebsd# mount /dev/md1s3 /mnt/nanobsd-confCreate CF slices
freebsd# gpart add -b 63 -s 7779681 -t freebsd da0
da0s1 added
freebsd# gpart add -b 7779807 -s 7779681 -t freebsd da0
da0s2 added
freebsd# gpart add -b 15559488 -s 102816 -t freebsd da0
da0s3 added
freebsd# gpart set -a active -i 1 da0
active set on da0s1freebsd# bsdlabel -w -B -b /mnt/nanobsd/boot/boot /dev/da0s1
freebsd# bsdlabel -w -B -b /mnt/nanobsd/boot/boot /dev/da0s2freebsd# newfs -E -L pfsense0 /dev/da0s1a
freebsd# newfs -E -L pfsense1 /dev/da0s2a
freebsd# newfs -E -L cf /dev/da0s3Copy data from image to CF
freebsd# mount /dev/da0s1a /mnt/cf-s1a
freebsd# mount /dev/da0s3 /mnt/cf-s3
freebsd# cp -a /mnt/nanobsd/* /mnt/cf-s1a/
freebsd# cp -a /mnt/nanobsd-conf/* /mnt/cf-s3/note: put what you want in /mnt/cf-s1a/etc/nanosize.txt (now it's 512mb image source -> 8gb)
freebsd# boot0cfg -B -b /mnt/cf-s1a/boot/boot0[sio] -m3 -s1 da0
note: "sio" for serial console outputUmount and clean
freebsd# umount /mnt/cf-s* /mnt/nanobsd*
freebsd# rm -rf /mnt/cf-s* /mnt/nanobsd*
freebsd# mdconfig -d -u 1Remove the CF and put it in your box.
– To calculate slices size using all CF available sectors --
#!/bin/csh set geom="da0" set start=63 set confSize="102816" if ($#argv == 1) then set geom=$1 endif set sectors=`diskinfo $geom | awk '{print $4}'` if ($sectors <= 0 ) then exit 1 endif set sliceSize=`expr \( $sectors - $confSize - 126 \) / 2` set slice2=`expr $sliceSize + 126` set slice3=`expr $slice2 + $sliceSize` echo "start - size - slice" printf "$start - $sliceSize - $geom\s1a\n" printf "$slice2 - $sliceSize - $geom\s2a\n" printf "$slice3 - $confSize - $geom\s3\n"
-
Looks ok though you probably want to use something more like cpio, rsync, or dump/restore to duplicate because a cp alone may miss (or mishandle) some special files or file settings.
-
ok, thanks!
I tried to duplicate with tar and it worked fine as well. Is this a more proper way?cd /mnt/nanobsd tar cf - * | ( cd /mnt/cf-s1a ; tar xf - )
-
tar may work ok so long as it's set to perserve permissions (-p)
-
If you set up your slices properly, upgrades should still work; however, you will need to create appropriately sized upgrade images or when you upgrade the file system will not fill the whole slice (which is typical when using an upgrade image smaller than intended for your base image size).
-
It's been asked other places, but I never really saw an answer. What's the benefit of having more available space on a Compact Flash card? As long as your packages fit, it's not like you should be using the space for any dynamic data (since you'd wear out the flash cells.)
-
There really isn't any benefit, aside from fitting more user/package data.
If your card does wear leveling it's actually better to use a small image size and leave more cells free to disappear as they wear out.