Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Oct 2023 11:56:11 -0600
From:      Warner Losh <imp@bsdimp.com>
To:        =?UTF-8?Q?Dag=2DErling_Sm=C3=B8rgrav?= <des@freebsd.org>
Cc:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Re: something magic about the size of a ports tree
Message-ID:  <CANCZdfrR1tHRdiNiQ1kk0%2BQMLt4gegkO0Xocp=1B5a-WR6cCCg@mail.gmail.com>
In-Reply-To: <86y1gjhdx7.fsf@ltc.des.no>
References:  <ZRw8x58bxtp26A8e@c720-1400094.fritz.box> <86y1gjhdx7.fsf@ltc.des.no>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
On Tue, Oct 3, 2023, 10:24 AM Dag-Erling Smørgrav <des@freebsd.org> wrote:

> Matthias Apitz <guru@unixarea.de> writes:
> > I have on my poudriere build host a ports tree and wanted to move it to
> > the host where the resulting packages are installed:
> >
> > root@jet:/usr/local/poudriere/ports # du -sh ports20230806
> > 397M    ports20230806
> > root@jet:/usr/local/poudriere/ports # tar cf p.tar ports20230806
> > root@jet:/usr/local/poudriere/ports # ls -lh p.tar
> > -rw-r--r--  1 root wheel  672M Oct  3 18:00 p.tar
> >
> > already the size of the tar file is somewhat magic; but if you un-tar it
> > on the other host I will get:
> >
> > [guru@c720-1400094 ~]$ ls -lh p.tar
> > -rw-r--r--  1 guru wheel  672M  3 oct.  18:00 p.tar
> > [guru@c720-1400094 ~]$ tar xf p.tar
> > [guru@c720-1400094 ~]$ du -sh ports20230806
> > 1,2G  ports20230806
> >
> > How this is possible?
>
> Most files in the ports tree are very small.  On disk, each file gets
> rounded up to the nearest multiple of the filesystem block size, which
> could be as small as 512 bytes or as large as 8 kB (or even more in
> pathological cases).  In a tarball, they get rounded up to the nearest
> multiple of 512 bytes plus an additional 512 bytes per file for
> metadata.
>
> For instance, your average distinfo file (of which there are 30k in the
> ports tree) is only 200-250 bytes long, but it occupies 512 bytes on an
> FFS filesystem, 1 kB in a tarball, and 4 kB on a typical ZFS filesystem.
>
> Note that if the target system is FreeBSD 14 or newer, you can simply
> mount the tarball (`sudo mount -rt tarfs p.tar /usr/ports`).
>

Do we support any compression on top of that? Has support for poudriere
been added for it?

Aldo I want a pony.... I'm mostly curious... I have no immediate plans here
(though aligning with the boot loader and supporting this on a block device
to support rootfs would be cool). Maybe some or all of these wishes would
make good GSOC projects?

Warner

DES
> --
> Dag-Erling Smørgrav - des@FreeBSD.org
>
>

[-- Attachment #2 --]
<div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 3, 2023, 10:24 AM Dag-Erling Smørgrav &lt;<a href="mailto:des@freebsd.org">des@freebsd.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Matthias Apitz &lt;<a href="mailto:guru@unixarea.de" target="_blank" rel="noreferrer">guru@unixarea.de</a>&gt; writes:<br>
&gt; I have on my poudriere build host a ports tree and wanted to move it to<br>
&gt; the host where the resulting packages are installed:<br>
&gt;<br>
&gt; root@jet:/usr/local/poudriere/ports # du -sh ports20230806<br>
&gt; 397M    ports20230806<br>
&gt; root@jet:/usr/local/poudriere/ports # tar cf p.tar ports20230806<br>
&gt; root@jet:/usr/local/poudriere/ports # ls -lh p.tar<br>
&gt; -rw-r--r--  1 root wheel  672M Oct  3 18:00 p.tar<br>
&gt;<br>
&gt; already the size of the tar file is somewhat magic; but if you un-tar it<br>
&gt; on the other host I will get:<br>
&gt;<br>
&gt; [guru@c720-1400094 ~]$ ls -lh p.tar<br>
&gt; -rw-r--r--  1 guru wheel  672M  3 oct.  18:00 p.tar<br>
&gt; [guru@c720-1400094 ~]$ tar xf p.tar<br>
&gt; [guru@c720-1400094 ~]$ du -sh ports20230806<br>
&gt; 1,2G  ports20230806<br>
&gt;<br>
&gt; How this is possible?<br>
<br>
Most files in the ports tree are very small.  On disk, each file gets<br>
rounded up to the nearest multiple of the filesystem block size, which<br>
could be as small as 512 bytes or as large as 8 kB (or even more in<br>
pathological cases).  In a tarball, they get rounded up to the nearest<br>
multiple of 512 bytes plus an additional 512 bytes per file for<br>
metadata.<br>
<br>
For instance, your average distinfo file (of which there are 30k in the<br>
ports tree) is only 200-250 bytes long, but it occupies 512 bytes on an<br>
FFS filesystem, 1 kB in a tarball, and 4 kB on a typical ZFS filesystem.<br>
<br>
Note that if the target system is FreeBSD 14 or newer, you can simply<br>
mount the tarball (`sudo mount -rt tarfs p.tar /usr/ports`).<br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Do we support any compression on top of that? Has support for poudriere been added for it?</div><div dir="auto"><br></div><div dir="auto">Aldo I want a pony.... I&#39;m mostly curious... I have no immediate plans here (though aligning with the boot loader and supporting this on a block device to support rootfs would be cool). Maybe some or all of these wishes would make good GSOC projects?</div><div dir="auto"><br></div><div dir="auto">Warner</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
DES<br>
-- <br>
Dag-Erling Smørgrav - des@FreeBSD.org<br>
<br>
</blockquote></div></div></div>
help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CANCZdfrR1tHRdiNiQ1kk0%2BQMLt4gegkO0Xocp=1B5a-WR6cCCg>