2021-07-03 07:35:18 +01:00
|
|
|
|
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xml:id="sec-nix-gc">
|
|
|
|
|
<title>Cleaning the Nix Store</title>
|
|
|
|
|
<para>
|
|
|
|
|
Nix has a purely functional model, meaning that packages are never
|
|
|
|
|
upgraded in place. Instead new versions of packages end up in a
|
|
|
|
|
different location in the Nix store (<literal>/nix/store</literal>).
|
|
|
|
|
You should periodically run Nix’s <emphasis>garbage
|
|
|
|
|
collector</emphasis> to remove old, unreferenced packages. This is
|
|
|
|
|
easy:
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$ nix-collect-garbage
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Alternatively, you can use a systemd unit that does the same in the
|
|
|
|
|
background:
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
# systemctl start nix-gc.service
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
You can tell NixOS in <literal>configuration.nix</literal> to run
|
|
|
|
|
this unit automatically at certain points in time, for instance,
|
|
|
|
|
every night at 03:15:
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting language="bash">
|
|
|
|
|
nix.gc.automatic = true;
|
|
|
|
|
nix.gc.dates = "03:15";
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
The commands above do not remove garbage collector roots, such as
|
|
|
|
|
old system configurations. Thus they do not remove the ability to
|
|
|
|
|
roll back to previous configurations. The following command deletes
|
|
|
|
|
old roots, removing the ability to roll back to them:
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$ nix-collect-garbage -d
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
You can also do this for specific profiles, e.g.
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$ nix-env -p /nix/var/nix/profiles/per-user/eelco/profile --delete-generations old
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Note that NixOS system configurations are stored in the profile
|
|
|
|
|
<literal>/nix/var/nix/profiles/system</literal>.
|
|
|
|
|
</para>
|
|
|
|
|
<para>
|
|
|
|
|
Another way to reclaim disk space (often as much as 40% of the size
|
|
|
|
|
of the Nix store) is to run Nix’s store optimiser, which seeks out
|
|
|
|
|
identical files in the store and replaces them with hard links to a
|
|
|
|
|
single copy.
|
|
|
|
|
</para>
|
|
|
|
|
<programlisting>
|
|
|
|
|
$ nix-store --optimise
|
|
|
|
|
</programlisting>
|
|
|
|
|
<para>
|
|
|
|
|
Since this command needs to read the entire Nix store, it can take
|
|
|
|
|
quite a while to finish.
|
|
|
|
|
</para>
|
|
|
|
|
<section xml:id="sect-nixos-gc-boot-entries">
|
|
|
|
|
<title>NixOS Boot Entries</title>
|
|
|
|
|
<para>
|
|
|
|
|
If your <literal>/boot</literal> partition runs out of space,
|
|
|
|
|
after clearing old profiles you must rebuild your system with
|
2021-10-27 22:36:04 +01:00
|
|
|
|
<literal>nixos-rebuild boot</literal> or
|
|
|
|
|
<literal>nixos-rebuild switch</literal> to update the
|
2021-07-03 07:35:18 +01:00
|
|
|
|
<literal>/boot</literal> partition and clear space.
|
|
|
|
|
</para>
|
|
|
|
|
</section>
|
|
|
|
|
</chapter>
|