[Nix-dev] Broken nix database/store.

Guillaume Maudoux (Layus) layus.on at gmail.com
Fri Jun 10 12:32:50 CEST 2016



Le 10/06/16 à 12:09, Joachim Schiele a écrit :
> On 09.06.2016 19:21, Layus wrote:
>> Hi,
>>
>> Due to a wrong manipulation when activating dir_index on my root
>> partition, I have now plenty of live orphaned paths in my store (about
>> 5G) like this one:
>>
>> |$ nix-store -q --referrers-closure
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> $ nix-store --delete
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> finding garbage collector roots... error: cannot delete path
>> ‘/nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2’ since
>> it is still alive 0 store paths deleted, 0.00 MiB freed $ nix-store
>> --delete --ignore-liveness
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> error: you are not allowed to ignore liveness 0 store paths deleted,
>> 0.00 MiB freed $ sudo nix-store --delete
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> finding garbage collector roots... error: cannot delete path
>> ‘/nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2’ since
>> it is still alive 0 store paths deleted, 0.00 MiB freed $ sudo nix-store
>> --delete --ignore-liveness
>> /nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2
>> finding garbage collector roots... deleting
>> ‘/nix/store/4zhkw0g564g3ljdpnn8j5krrsvcxildn-libXcomposite-0.4.4.tar.bz2’ deleting
>> ‘/nix/store/trash’ deleting unused links... note: currently hard linking
>> saves 1754.97 MiB 1 store paths deleted, 0.27 MiB freed |
>>
>> Is there some repair command to update liveness of paths ?
> what you could do:
> 1. create a backup of all files
> 2. remove most stuff in / except /home/, /etc/nixos/, /etc/nix,
> /nix/store (among some paths i just didn't think about)
>
> 3. boot a rescue nixos live-stick
> 4. do a nixos-install with the config you already have
>
> this basically makes sure that your store sqlite database gets properly
> repopulated.
>
> after you booted into your new system, consider:
>   nix-collect-garbage -d
>
> to get rid of unused /nix/store paths

Thanks Joachim,

I did something very similar (with a chroot in archlinux), just to
discover that the files were still present.
It turns out that they are "live" in the nix store because of the
options "gc-keep-outputs" and "gc-keep-derivations" that are enabled in
my config.

for the record, `nix-collect-garbage -d --option gc-keep-outputs false
--option gc-keep-derivations false` does the job... :-).

Guillaume.



More information about the nix-dev mailing list