Fedora 17’s unified filesystem (/usr-move)

Harald Hoyer harald at redhat.com
Fri Jan 27 13:10:24 UTC 2012


Hello Testers and rawhide Users,

Fedora 17 will locate the entire base operating system in /usr. The directories
/bin, /sbin, /lib, /lib64 will only be symlinks:
 /bin → /usr/bin
 /sbin → /usr/sbin
 /lib → /usr/lib
 /lib64 → /usr/lib64

Some reasoning behind this change is outlined here:
 http://www.freedesktop.org/wiki/Software/systemd/TheCaseForTheUsrMerge

The official Fedora 17 feature page is here:
 https://fedoraproject.org/wiki/Features/UsrMove

The needed changes to implement the unified filesystem are about to land in
rawhide soon. New installations of rawhide/Fedora 17 will install the symlinks
right away, and no special care needs to be taken

Currently installed systems need some manual steps to convert the current system
to match the layout of rawhide/Fedora 17. After that, the system can continue to
be updated with YUM as usual.

Some RPM packages in rawhide/Fedora 17 will carry a RPM dependency guard, which
will make sure, they can only be installed when /bin, /sbin, /lib, /lib64 are
symlinks and not directories like in Fedora 16 and older.

The installed system’s base filesystem layout can not be safely altered, while
the system itself is running on top of it. Dracut, the initramfs used to find
and mount the root filesystem, can be instructed to convert the filesystem to
match rawhide/Fedora 17’s expectations.

A screenshot of a successful conversion process is here:
 http://people.freedesktop.org/~kay/usrmove-convert-log.png

The packages, which are about to land in rawhide, are at this moment available
via the ‘f17-usrmove’ koji tag. They are ready for testing now. Any tests,
preferably in virtual machines or snapshots, where failures are acceptable, are
more than welcome, and any feedback is greatly appreciated.

Keep in mind, that this still needs wider testing and a possible bug in the
conversion logic might break an installed system. Please be careful with your
data, do not try this on a production system, and always have a backup of your data.

If your system has a split-off /usr, a separate mount point, the dracut /usr
mount conversion logic for /usr on NFS is not yet supported; we are working on
it. /usr on iSCSI, FCoE, NBD although is supported, as long as “netroot=...” is
specified on the kernel command line for these disks (see man dracut.kernel(7)).

Please report any issues regarding the /usr-move test (not general rawhide bugs)
by replying to this email, by sending an email to the fedora-test list
<test at lists.fedoraproject.org>, or by grabbing ‘haraldh’ or ‘kay’ on IRC
#fedora-devel on freenode, or contact us by email directly.

The final guard in RPM is not yet enabled in the ‘f17-usrmove’ koji tag version
of the packages. Make sure you never install any of the packages below this tag
on an unconverted system, it will not be able to bootup. Before the packages hit
rawhide, the guard will be enabled and safely prevent these packages to be
installed on unconverted systems.

At the moment, we are still waiting for an updated RPM in the koji buildsystem,
which provides the runtime check for the filesystem guard. After this is
resolved by Fedora Release Engineering, we can go ahead and enable the needed
guard and move the packages from the ‘f17-usrmove’ koji tag to ‘rawhide’:
 https://fedorahosted.org/rel-eng/ticket/5034

This is the screen log of a full conversion and update process:
 http://people.freedesktop.org/~kay/usrmove-convert-log.txt

Here are the steps to prepare your system, to convert it, and to be able to
continue updating your installed system with YUM:

Download and install the most recent dracut package from rawhide:
 # yum --enablerepo=rawhide update dracut

Update the installed initramfs image for your current kernel, and instruct
dracut to include the dracut module to convert your current filesystem:
 # dracut --force --add usrmove

If dracut detects ‘rd.usrmove’ on the kernel command line at bootup, it starts
the filesystem conversion of the root filesystem.

Change the following kernel commandline parameter directly in the bootloader
menu, which is shown during bootup, or edit the line in /etc/grub*.cfg.
 - remove “ro”
 - append “rw” to let dracut mount your root filesystem writeable
 - remove “rhgb” to hide the graphical bootsplash
 - append “rd.info” to get a more verbose output from dracut
 - append “rd.usrmove” to enable the /usr-move conversion script in dracut
 - append “selinux=0” for now, because the relabeling in a converted F16 system
does not seem to work properly at this moment

During bootup, dracut will now convert your filesystem, and /lib, /lib64, /bin
and /sbin should then all be symbolic links to the corresponding directories in
/usr.

After the conversion, the system needs to be immediately updated to rawhide. No
packages from F16 or F15, or older rawhide packages must be installed anymore.
Make sure to disable any F15 and F16 repositories in yum!

Any files with conflicting names, which the conversion could not resolve, will
be backed up to files named *.usrmove~ residing in /usr/lib, /usr/lib64,
/usr/bin and /usr/sbin.

The log messages, which dracut has generated during bootup, can be retrieved with:
 # dmesg | grep dracut

After a successful conversion, revert the changes made to the kernel command
line in the bootloader config file /etc/grub*.cfg.

SELinux relabelling should take effect after you rebooted your updated system
and can take a long time (at least in a VM it takes insanely long and is still
not finished). We are currently investigating, what seem to take so long, so you
might consider to test with SELinux disabled for now.

Until the rawhide repository gets all the converted rpms, use the f17-usrmove
repository to update the system after the filesystem conversion and disable
rawhide in the file /etc/yum.repos.d/fedora-rawhide.repo

Add f17-usrmove in the file /etc/yum.repos.d/f17-usrmove.repo
 [f17-usrmove]
 name=Fedora $releasever - $basearch
 failovermethod=priority
 baseurl=http://koji.fedoraproject.org/repos/f17-usrmove/latest/$basearch
 enabled=1
 metadata_expire=1d
 gpgcheck=0

# yum clean all
# yum upgrade

After upgrading, all should be set and done.

Have fun with your system and say “Good bye” to /bin, /sbin, /lib, /lib64 and
meet them in /usr.

:-)


More information about the devel mailing list