Re: BSD Trivia spørgsmål of the week - #1

From: Phil Regnauld (none@regnauld--x0.dk.lh.bsd-dk.dk)
Date: Tue 14 Nov 2006 - 18:12:07 CET


Date: Tue, 14 Nov 2006 18:12:07 +0100
From: Phil Regnauld <none@regnauld--x0.dk.lh.bsd-dk.dk>
To: bsd-dk@bsd-dk.dk
Subject: Re: BSD Trivia spørgsmål of the week - #1

On Tue, Nov 14, 2006 at 05:17:53PM +0100, Søren Hansen wrote:
> Glimrende initiativ!

    :)

    We have a winner:

> Løsning 3)
> Igen, hvis der er en enkelt inode ledig, kan du lave en virtuel
> partition, der er stor nok til at holde de nødvendige filer med med
> driveren md. Den kan lave det i memory eller i en fil, alt efter, hvad
> du vurderer der er behov for.
> Tag udgangspunkt i "man mdconfig":
> To create a 5MB file-backed disk:
>
> dd if=/dev/zero of=somebackingfile bs=1k count=5k
> mdconfig -a -t vnode -f somebackingfile -u 0
> bsdlabel -w md0 auto
> newfs md0c
> mount /dev/md0c /mnt

    Det er i hvertfald den løsning som jeg havde fundet på dengang
    jeg løbede tør for plads -- jeg flyttede midlertidigt 1 fil
    for at kunne oprette "newdisk.img" ved at køre:

    truncate +10G newdisk.img

    (fordelen med trunate er at filen er "sparse", dvs. at den kun allokerer
    disk blocks on demand. Til gengæld bliver filen temmelig fragmenteret --
    så dd er også en god løsning).

    Løsning 2 (tar) er også korrekt, hvis man ikke har brug for de
    filer. Men hvis idéen er at alle filer er vigtige, så er det nok
    smartest at lave som du beskriver, pånær et punkt:

> /mnt skal erstattes med et directory, der ligger på den disk, hvor der
> er plads men mangel på inoder. Hvis du ikke kan bruge et eksisterende
> directory, kræver denne løsning en inode mere fri.
> Nu kan du flytte filer over på "/mnt" og derefter bruge symlinks. Det
> kræver selvfølgelig, at du kan flytte filerne directory-vis, da en
> symlink også tager en inode.

    Det er rigtigt at det ikke hjælper at lave 10 symlinks til 10 filer,
    man skal helst vælge en directory hvor der er mange filer, rename
    directory, og mounte den nye volum på:

    truncate +10G newdisk.img # bruger 1 inode
    mdconfig -a -t vnode -f newdisk.img -u 0
    bsdlabel -w md0 auto
    newfs -U /dev/md0c

    mv .../bigfolder .../bigfolder.old
    mkdir .../bigfolder # bruger 1 inode
    mount /dev/md0c .../bigfolder
    mv bigfolder.old/* .../bigfolder/ && \
        rmdir bigfolder.old # frigør 1 inode

    Man kan også kan være lidt evil og lave en sparse fil som
    er samme størrelse som selve partitionen, bare med flere inodes / blocks
    (newfs -i), og så flytte ALLE filer til den nye volum. Backing filens
    diskforbrug vokser i takt med flytning af filer, indtil man har flyttet
    alle filer over til den nye volum -- så er der til sidst kun 1 fil
    på den oprindelig partitionen.

> Løsning 5)
> NFS. Hvis du ikke allerede har NFS oppe, så er det ikke lige oplagt
> som en nødløsning, medmindre du forventer nødløsningen skal køre i
> længere tid.

    Good point. Det kan være en god løsning.

    Du skriver bare en adresse til mig privat, og den ønskede størrelse,
    og fallback size hvis ikke vi har det, så får du en NetBSD t-shirt :)

    Tak til de andre for deres svar!

    Phil



This archive was generated by hypermail 2b30 : Thu 30 Nov 2006 - 23:00:03 CET