We have a few Debian 5 systems that are still using /dev/hda in the fstab. We'd like to covert them to using UUIDs. This is supposed to be done automatically via the "linux-base" package (postinst), but for some reason it's not kicking in (perhaps someone already ran it and it saved some state somewhere to not do it).

While it's certainly possible to change over to UUIDs by manually editing a bunch of files, it'd be useful to script it somehow. Various incantations of debconf and debconf-set-selections don't seem to work.

So basically, how can one invoke the Debian-provided script/s that do/es all the UUID conversions?


Per Gabor Vincze, the script from Ubuntu forums seems to do a decent code:

# This script will change all entries of the form /dev/sd* in /etc/fstab to their appropriate UUID names
# You must have root privelages to run this script (use sudo)
if [ `id -u` -ne 0 ]; then                                              # Checks to see if script is run as root
        echo "This script must be run as root" >&2                      # If it isn't, exit with error
        exit 1

cp /etc/fstab /etc/fstab.backup
sed -n 's|^/dev/\([sh]d[a-z][0-9]\).*|\1|p' </etc/fstab >/tmp/devices   # Stores all /dev entries from fstab into a file
while read LINE; do                                                     # For each line in /tmp/devices
        UUID=`ls -l /dev/disk/by-uuid | grep "$LINE" | sed -n 's/^.* \([^ ]*\) -> .*$/\1/p'` # Sets the UUID name for that device
        sed -i "s|^/dev/${LINE}|UUID=${UUID}|" /etc/fstab               # Changes the entry in fstab to UUID form
done </tmp/devices
cat /etc/fstab                                                          # Outputs the new fstab file
printf "\n\nWrite changes to /etc/fstab? (y/n) "
case "$RESPONSE" in
        [yY]|[yY][eE][sS])                                              # If answer is yes, keep the changes to /etc/fstab
                echo "Writing changes to /etc/fstab..."
        [nN]|[nN][oO]|"")                                               # If answer is no, or if the user just pressed Enter
                echo "Aborting: Not saving changes..."                  # don't save the new fstab file
                cp /etc/fstab.backup /etc/fstab
                rm /etc/fstab.backup
        *)                                                              # If answer is anything else, exit and don't save changes
                echo "Invalid Response"                                 # to fstab
                echo "Exiting"
                cp /etc/fstab.backup /etc/fstab
                rm /etc/fstab.backup
                exit 1
rm /tmp/devices
echo "DONE!"

The script would have been in /var/lib/dpkg/info/linux-base.postinst . You could launch it manually, or look for a "migrated" flag that you could clear before calling dpkg-reconfigure.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.