#!/bin/bash shopt -s extglob m4_include(common) write_source() { local src=$1 spec= label= uuid= comment=() label=$(blkid -s LABEL -o value "$1" 2>/dev/null) uuid=$(blkid -s UUID -o value "$1" 2>/dev/null) # bind mounts do not have a UUID! case $bytag in '') [[ $uuid ]] && comment=("UUID=$uuid") [[ $label ]] && comment+=("LABEL=$label") ;; LABEL) spec=$label [[ $uuid ]] && comment=("$src" "UUID=$uuid") ;; UUID) spec=$uuid comment=("$src") [[ $label ]] && comment+=("LABEL=$label") ;; *) [[ $uuid ]] && comment=("$1" "UUID=$uuid") [[ $label ]] && comment+=("LABEL=$label") [[ $bytag ]] && spec=$(blkid -s "$bytag" -o value "$1") ;; esac [[ $comment ]] && printf '# %s\n' "${comment[*]}" if [[ $spec ]]; then printf '%-20s' "$bytag=$spec" else printf '%-20s' "$(mangle "$src")" fi } usage() { cat </dev/null; then # this is root. we can't possibly have more than one... pass=1 foundroot=1 fi # we don't fsck pseudofs if fstype_is_pseudofs "$fstype"; then (( nopseudofs )) && continue pass=0 fi if [[ $fsroot != / ]]; then if [[ $fstype = btrfs ]]; then opts+=,subvol=${fsroot#/} else # it's a bind mount src=$(findmnt -funcevo TARGET "$src")$fsroot if [[ $src -ef $target ]]; then # hrmm, this is weird. we're probably looking at a file or directory # that was bound into a chroot from the host machine. Ignore it, # because this won't actually be a valid mount. Worst case, the user # just re-adds it. continue fi fstype=none opts+=,bind pass=0 fi fi # write one line write_source "$src" printf '\t%-10s' "/$(mangle "${target#/}")" "$fstype" "$opts" printf '\t%s %s' "$dump" "$pass" printf '\n\n' done # handle swaps devices { # ignore header read while read -r device type _ _ prio; do options=defaults if [[ $prio != -1 ]]; then options+=,pri=$prio fi # skip files marked deleted by the kernel [[ $device = *'\\040(deleted)' ]] && continue if [[ $type = file ]]; then printf '%-20s' "$device" elif [[ $device = /dev/dm-+([0-9]) ]]; then # device mapper doesn't allow characters we need to worry # about being mangled, and it does the escaping of dashes # for us in sysfs. write_source "$(dm_name_for_devnode "$device")" else write_source "$(unmangle "$device")" fi printf '\t%-10s\t%-10s\t%-10s\t0 0\n\n' 'none' 'swap' "$options" done }