63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			XML
		
	
	
	
	
	
<chapter xmlns="http://docbook.org/ns/docbook"
 | 
						||
        xmlns:xlink="http://www.w3.org/1999/xlink"
 | 
						||
        xmlns:xi="http://www.w3.org/2001/XInclude"
 | 
						||
        version="5.0"
 | 
						||
        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 (<filename>/nix/store</filename>).
 | 
						||
You should periodically run Nix’s <emphasis>garbage
 | 
						||
collector</emphasis> to remove old, unreferenced packages.  This is
 | 
						||
easy:
 | 
						||
 | 
						||
<screen>
 | 
						||
$ nix-collect-garbage
 | 
						||
</screen>
 | 
						||
 | 
						||
Alternatively, you can use a systemd unit that does the same in the
 | 
						||
background:
 | 
						||
 | 
						||
<screen>
 | 
						||
# systemctl start nix-gc.service
 | 
						||
</screen>
 | 
						||
 | 
						||
You can tell NixOS in <filename>configuration.nix</filename> to run
 | 
						||
this unit automatically at certain points in time, for instance, every
 | 
						||
night at 03:15:
 | 
						||
 | 
						||
<programlisting>
 | 
						||
<xref linkend="opt-nix.gc.automatic"/> = true;
 | 
						||
<xref linkend="opt-nix.gc.dates"/> = "03:15";
 | 
						||
</programlisting>
 | 
						||
 | 
						||
</para>
 | 
						||
 | 
						||
<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:
 | 
						||
<screen>
 | 
						||
$ nix-collect-garbage -d
 | 
						||
</screen>
 | 
						||
You can also do this for specific profiles, e.g.
 | 
						||
<screen>
 | 
						||
$ nix-env -p /nix/var/nix/profiles/per-user/eelco/profile --delete-generations old
 | 
						||
</screen>
 | 
						||
Note that NixOS system configurations are stored in the profile
 | 
						||
<filename>/nix/var/nix/profiles/system</filename>.</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.
 | 
						||
<screen>
 | 
						||
$ nix-store --optimise
 | 
						||
</screen>
 | 
						||
Since this command needs to read the entire Nix store, it can take
 | 
						||
quite a while to finish.</para>
 | 
						||
 | 
						||
</chapter>
 |