Recreating the FreeBSD Installation Disks

Ian Smith smithi at nimnet.asn.au
Fri Sep 5 14:41:16 UTC 2014


In freebsd-questions Digest, Vol 534, Issue 9, Message: 21
On Thu, 28 Aug 2014 19:38:40 +0200 Roland Smith <rsmith at xs4all.nl> wrote:
 > On Thu, Aug 28, 2014 at 09:46:00AM -0500, Martin G. McCormick wrote:
 > > Roland Smith writes:
 > > > Looking at the mkisofs manpage, it *should* detect hard links by default. 
 > > > Does
 > > > using the `-cache-inodes` option make any difference?
 > > 
 > > I tried explicitly -no-cache-inodes and then -cache-inodes and
 > > the two files vary by about 15 bytes. It looks like the hard
 > > links are lost in the mounting process which means that one can
 > > not use that as a test after all.
 > 
 > There is nothing in the md or mdconfig manual pages about hard links. So it
 > looks like you're right.

It seems that's correct regarding md, but there are also strangenesses 
with tar (same version as Martin's: bsdtar 2.8.5 - libarchive 2.8.5)

I ran some more tests on reading this, on a 9.2-S system from about six 
weeks ago (9.3-PRERELEASE #0: Wed Jun 25), using the 9.3-R dvd1.iso

As reported, I'd run dvd1_to_memstick.sh <http://pastebin.com/fzgVaCgW> 
to convert the dvd1.iso to a memstick.img - though I've yet to install 
it, nor check if bsdconfig needs patching to point pkg to its packages,
which had been an issue with the 10.0-R memstick made from dvd1.

This worked fine with 9.2-R, and I just checked to find the same hard 
links investigated below ARE CORRECT even though I used the same script 
to create the memstick from which this system was installed, so I'm a
bit confused as to what's happening here .. it almost seems that the 
process of installing these files re-hard-links them?  via mtree maybe?

 > To test it, you could use `ls -i` on two files in the mounted CD-ROM image
 > that you suspect should be hard-linked. E.g. ${CD}/bin/[ and ${CD}/bin/test.
 > If they don't return the same inode number md(4) does not provide hard links.

That seems to be the case, at least from an .iso image.  Details below.

 > > There is that version of tar as in tar-3.1.2 which I can't seem
 > > to locate anywhere although the version may be at a higher
 > > number by now.
 > > 	How did you get it? I've not found anything for tar on
 > > FreeBSD except for gnutar and that does not process iso9660
 > > images.
 > 
 > tar 3.1.2 is the version included in FreeBSD 10. Since libarchive and cpio have
 > the same version, I assume they belong together.
 > 
 > What you could try is copy /usr/src/contrib/libarchive/ from 10.0 in to your
 > 9.1 source tree and see if you can build it on 9.1.

It'd be cool if someone using 10 could check the behaviours shown below 
to see if the later version of tar really is a solution, and to see if 
md showing hardlinked files with the right number of links, but each 
with a different inode is really a problem, apart from the extra space?

Here goes:

root at x200:~ # rm -rf ~smithi/mstk_tmp/*
root at x200:~ # tar -pxf ~smithi/FreeBSD-9.3-RELEASE-amd64-dvd1.iso -C ~smithi/mstk_tmp
tar: Ignoring out-of-order file (etc/aliases) 88256512 < 88256726
tar: Ignoring out-of-order file (etc/resolv.conf) 88700928 < 88702606
     [.. hundreds of these, but no apparent problem afterwards ..]
tar: Ignoring out-of-order file (usr/share/vi/catalog/nl_NL.ISO8859-1) 1799053312 < 1799064190
tar: Error exit delayed from previous errors.

root at x200:~ # du -hd1 ~smithi/mstk_tmp
1.2M    /home/smithi/mstk_tmp/bin
 83M    /home/smithi/mstk_tmp/boot
4.0k    /home/smithi/mstk_tmp/dev
2.5M    /home/smithi/mstk_tmp/etc
8.6M    /home/smithi/mstk_tmp/lib
244k    /home/smithi/mstk_tmp/libexec
4.0k    /home/smithi/mstk_tmp/media
4.0k    /home/smithi/mstk_tmp/mnt
  1G    /home/smithi/mstk_tmp/packages
4.0k    /home/smithi/mstk_tmp/proc
4.0k    /home/smithi/mstk_tmp/rescue
 12k    /home/smithi/mstk_tmp/root
5.1M    /home/smithi/mstk_tmp/sbin
4.0k    /home/smithi/mstk_tmp/tmp
642M    /home/smithi/mstk_tmp/usr
296k    /home/smithi/mstk_tmp/var
1.6M    /home/smithi/mstk_tmp/.rr_moved
1.7G    /home/smithi/mstk_tmp

Just looking at files in bin with 2 hard links .. sbin, usr/bin
and usr/sbin seem to contain most of the other hardlinked files.

smithi at x200:~ % ls -li ~/mstk_tmp/bin | grep ' 2 ' | sort
2889706 -r-xr-xr-x  2 root  wheel  382400 Jul 11 10:14 csh
2889706 -r-xr-xr-x  2 root  wheel  382400 Jul 11 10:14 tcsh
2889714 -r-xr-xr-x  2 root  wheel   54816 Jul 11 10:14 ed
2889714 -r-xr-xr-x  2 root  wheel   54816 Jul 11 10:14 red
2889722 -r-xr-xr-x  2 root  wheel   11424 Jul 11 10:14 link
2889722 -r-xr-xr-x  2 root  wheel   11424 Jul 11 10:14 ln
2889727 -r-xr-xr-x  2 root  wheel   18048 Jul 11 10:14 pgrep
2889727 -r-xr-xr-x  2 root  wheel   18048 Jul 11 10:14 pkill
2889733 -r-xr-xr-x  2 root  wheel   15664 Jul 11 10:14 rm
2889733 -r-xr-xr-x  2 root  wheel   15664 Jul 11 10:14 unlink
2889741 -r-xr-xr-x  2 root  wheel   11688 Jul 11 10:14 [
2889741 -r-xr-xr-x  2 root  wheel   11688 Jul 11 10:14 test

So these directory entries show 2 links, and each of the pair have
the same inode number, as one would expect.

However with the .iso as /dev/md0 mounted on /mnt, the link counts do 
_show_ eg '2' - but the files are shown as having unique inodes, which 
might? be the way they appear on an actual DVD; I have no machine with a 
DVD drive to test that theory.

root at x200:~ # rm -rf ~smithi/mstk_tmp/*
root at x200:~ # mdconfig -f ~smithi/FreeBSD-9.3-RELEASE-amd64-dvd1.iso
md0
root at x200:~ # mdconfig -lv
md0     vnode    1718M  /home/smithi/FreeBSD-9.3-RELEASE-amd64-dvd1.iso
root at x200:~ # mount_cd9660 /dev/md0 /mnt

smithi at x200:~ % ls -li /mnt/bin | grep ' 2 ' | sort
92918 -r-xr-xr-x  2 root  wheel  382400 Jul 11 10:14 csh
93640 -r-xr-xr-x  2 root  wheel   54816 Jul 11 10:14 ed
94448 -r-xr-xr-x  2 root  wheel   11424 Jul 11 10:14 link
94568 -r-xr-xr-x  2 root  wheel   11424 Jul 11 10:14 ln
95156 -r-xr-xr-x  2 root  wheel   18048 Jul 11 10:14 pgrep
95278 -r-xr-xr-x  2 root  wheel   18048 Jul 11 10:14 pkill
96002 -r-xr-xr-x  2 root  wheel   54816 Jul 11 10:14 red
96120 -r-xr-xr-x  2 root  wheel   15664 Jul 11 10:14 rm
97104 -r-xr-xr-x  2 root  wheel  382400 Jul 11 10:14 tcsh
97224 -r-xr-xr-x  2 root  wheel   11688 Jul 11 10:14 test
97344 -r-xr-xr-x  2 root  wheel   15664 Jul 11 10:14 unlink
97594 -r-xr-xr-x  2 root  wheel   11688 Jul 11 10:14 [

ie, link counts are right, but separate inodes per file.

root at x200:~ # tar -cf - -C /mnt . | tar -xpf - -C /home/smithi/mstk_tmp/

As per bsdtar(1), and the recipe used by Darren in dvd1_to_memstick.sh
Nothing reported on stdout, but all hard links are now lost ..

smithi at x200:~ % ls -li ~/mstk_tmp/bin | grep ' 2 ' | sort
smithi at x200:~ %
smithi at x200:~ % ls -li ~/mstk_tmp/bin | sort
3384240 -r-xr-xr-x  1 root  wheel   12080 Jul 11 10:14 cat
3384241 -r-xr-xr-x  1 root  wheel    8152 Jul 11 10:14 chflags
3384242 -r-xr-xr-x  1 root  wheel   18504 Jul 11 10:14 chio
3384243 -r-xr-xr-x  1 root  wheel    8624 Jul 11 10:14 chmod
3384244 -r-xr-xr-x  1 root  wheel   21072 Jul 11 10:14 cp
3384245 -r-xr-xr-x  1 root  wheel  382400 Jul 11 10:14 csh
[..]
3384279 -r-xr-xr-x  1 root  wheel  382400 Jul 11 10:14 tcsh
3384280 -r-xr-xr-x  1 root  wheel   11688 Jul 11 10:14 test
3384281 -r-xr-xr-x  1 root  wheel   15664 Jul 11 10:14 unlink
3384282 -r-xr-xr-x  1 root  wheel    7240 Jul 11 10:14 uuidgen
3384283 -r-xr-xr-x  1 root  wheel   11688 Jul 11 10:14 [

root at x200:~ # du -hd1 ~smithi/mstk_tmp	|	vs tar -pxf .iso
1.7M    /home/smithi/mstk_tmp/bin	|	vs 1.2M
 83M    /home/smithi/mstk_tmp/boot
4.0k    /home/smithi/mstk_tmp/dev
2.5M    /home/smithi/mstk_tmp/etc
8.6M    /home/smithi/mstk_tmp/lib
244k    /home/smithi/mstk_tmp/libexec
4.0k    /home/smithi/mstk_tmp/media
4.0k    /home/smithi/mstk_tmp/mnt
  1G    /home/smithi/mstk_tmp/packages
4.0k    /home/smithi/mstk_tmp/proc
4.0k    /home/smithi/mstk_tmp/rescue
1.6M    /home/smithi/mstk_tmp/.rr_moved
 20k    /home/smithi/mstk_tmp/root	|	vs 12K (.cshrc)
6.2M    /home/smithi/mstk_tmp/sbin	|	vs 5.1M
4.0k    /home/smithi/mstk_tmp/tmp
774M    /home/smithi/mstk_tmp/usr	|	vs 642M
296k    /home/smithi/mstk_tmp/var
1.9G    /home/smithi/mstk_tmp		|	vs 1.7G

Copying md(4)'s daddy phk@ for potential instant enlightenment :)

Also in search of explanation is why 'tar -cf . | tar -xpf -' lost links 
but reports no errors, while tar -xpf isofile doesn't lose hardlinks but 
(here) complains or in Martin's case, couldn't make a dir so lost files?

cheers, Ian


More information about the freebsd-questions mailing list