Disk breakdown

A breakdown of a disk
I created a virtual disk, it is 32MB big:

1+0 records in 1+0 records out 33554432 bytes transferred in 0.164 secs (203728139 bytes/sec) -rw-r--r-- 1 root  wheel  32.0M Oct 28 08:55 disk
 * 1) dd if=/dev/zero of=disk bs=32m count=1
 * 1) ls -lh disk

WTF? It's a file! Ok so lets make it a disk device:

svnd0: 33554432 bytes on disk
 * 1) vnconfig -cv svnd0 disk

let's make a new partition on it called a:

disklabel: Can't get bios geometry: Device not configured Initial label editor (enter '?' for help at any prompt) > a partition: [a] offset: [0] size: [65536] FS type: [4.2BSD] > p a device: /dev/rsvnd0c type: SCSI disk: vnd device label: fictitious bytes/sector: 512 sectors/track: 100 tracks/cylinder: 1 sectors/cylinder: 100 cylinders: 655 total sectors: 65536 free sectors: 0 rpm: 3600 16 partitions: a:        65536             0  4.2BSD   2048 16384   16 # Cyl     0 -   655* c:        65536             0  unused      0     0      # Cyl     0 -   655* > q Write new label?: [y] y #
 * 1) disklabel -E /dev/rsvnd0c
 * 1)             size        offset  fstype [fsize bsize  cpg]

Now write the filesystem on it with newfs:

Warning: cylinder groups must have a multiple of 8 cylinders Warning: 64 sector(s) in last cylinder unallocated /dev/rsvnd0a:  65536 sectors in 656 cylinders of 1 tracks, 100 sectors 32.0MB in 1 cyl groups (656 c/g, 32.03MB/g, 4096 i/g) super-block backups (for fsck -b #) at: 32,
 * 1) newfs /dev/rsvnd0a

mount the new filesystem to /mnt:

Filesystem 512-blocks      Used     Avail Capacity  Mounted on /dev/svnd0a      64412         4     61188     0%    /mnt Filesystem 512-blocks      Used     Avail Capacity iused   ifree  %iused  Mounted on /dev/svnd0a      64412         4     61188     0%       1    4093     0%   /mnt
 * 1) mount /dev/svnd0a /mnt
 * 2) df /mnt
 * 1) df -i /mnt

OK let's count it up, we have 65536 blocks in total for the disk, 4094 inodes exist at 128 bytes size which is 1023 blocks, and we have 2 superblocks (0 and 32) which are 16384 bytes big each or 32 blocks, then the filesystem space claims 64412 blocks, this gives us a total of 65499 blocks which isn't quite the complete disksize of 65536 blocks, however I left the disklabel unaccounted for which also takes up some space.

Now let's fill the drive:

$ dd if=/dev/zero of=fill bs=1 /mnt: write failed, file system is full dd: fill: No space left on device 31326209+0 records in 31326208+0 records out 31326208 bytes transferred in 40.458 secs (774289 bytes/sec) $ df /mnt Filesystem 512-blocks      Used     Avail Capacity  Mounted on /dev/svnd0a      64412     61220       -28   100%    /mnt

100% capacity, but the used blocks aren't all the blocks that the filesystem claims, so let's repeat that last step but this time as root:

/mnt: write failed, file system is full dd: fill: No space left on device 32931841+0 records in 32931840+0 records out 32931840 bytes transferred in 44.276 secs (743779 bytes/sec) Filesystem 512-blocks      Used     Avail Capacity  Mounted on /dev/svnd0a      64412     64356     -3164   105%    /mnt
 * 1) dd if=/dev/zero of=fill bs=1
 * 1) df /mnt

Lovely almost all used up and it can't go further. Note that we're using up 105% capacity this is built into ffs and can be tweaked at newfs time. The superuser gets 5% above 100% of capacity noone else.