スクリプトからアンマウントされたパーティションのファイルシステムを見つける

スクリプトからアンマウントされたパーティションのファイルシステムを見つける

AIF(Arch Installation Framework)を使用してカスタムサイレントインストールを作成しており、特定のパーティションのパーティションでファイルシステムを見つける必要があります。

これまで私はこれを持っています:

grok_partitions () {
    local partitions=
    for label in `ls /dev/disk/by-label | grep "Arch"`
    do
        if [ $label == "Arch" ]
        then
            mount_point="/"
        else
            IFS="-" read base mount <<< "${label}"
            mount_point="/${mount}"
        fi

        local partition=$(readlink -f /dev/disk/by-label/${label})
        local part_no=$(echo ${partition} | grep -Po '\d+')
        local fs=$(parted -mls | grep "^${part_no}" | cut -d: -f5)
        partitions+="${partition} raw ${label} ${fs};yes;${mount_point};target;no_opts;${label};no_params\n"
    done

    # do the swap
    if [ -e /dev/disk/by-label/swap ]
    then
        local partition=$(readlink -f /dev/disk/by-label/swap)
        partitions+="$partition raw swap swap;yes;no_mountpoint;target;no_opts;swap;no_params"
    else
        # if there's no labeled swap, use the first one we find
        local partition=$(fdisk -l | grep -m1 swap | awk '{ print $1 }')
        if [ ! -e $partition ]
        then
            echo "No swap detected. Giving up."
            exit 1
        fi
        partitions+="$partition raw no_label swap;yes;no_mountpoint;target;no_opts;no_label;no_params"
    fi

    echo -n ${partitions}
}

これは、ハードドライブが1つしかないマイコンピュータでは正常に機能しますが、LiveCD(LiveCDが別のドライブ/ dev / sr0として選択されている)で実行されている仮想マシンで実行すると(明らかに)失敗します。

私は試してみるいくつかのトリックを考えました。

  • mount $partition; grep $partition /etc/mtab | awk ...
  • 使用するがparted -mls賢いスクリプトを介して私は興味のあるパーティションを抽出し、スクリプトで行ったように解析します。

これを行うより良い簡単な方法はありますか?目的のパーティションがすでに存在しているので、そのファイルシステムを見つけて利用可能なスワップを見つけます。

ベストアンサー1

私は答えを見つけたと思います:blkid

マニュアルページから:

blkid プログラムは、libblkid(3) ライブラリーを使用するコマンド行インターフェースです。これは、ブロックデバイス(ファイルシステムや交換など)に保持されているコンテンツタイプと、コンテンツメタデータ(LABELフィールドまたはUUIDフィールドなど)の属性(トークン、NAME =値のペア)を決定します。

明らかに、デバイス名とファイルシステムの種類(およびその他の有用な情報)が印刷されます。すべてのデバイスとその種類のリストを取得するには、次の手順を実行します。

blkid | sed 's!\(.*\):.*TYPE="\(.*\)".*!\1: \2!'

すべてのデバイスを見つけるには/dev/sd*/grepを追加してください。

blkid | grep "/dev/sd.*" | sed 's!\(.*\):.*TYPE="\(.*\)".*!\1: \2!'

その後、必要なものを入手しcutてください。awk

おすすめ記事