একটি স্ক্রিপ্ট থেকে একটি মাউন্ট মাউন্ট পার্টিশনের ফাইল সিস্টেম সন্ধান করুন


16

আমি এআইএফ (আর্চ ইনস্টলেশন ফ্রেমওয়ার্ক) ব্যবহার করে একটি কাস্টম স্বয়ংক্রিয় ইনস্টল লিখছি এবং আমার একটি পার্টিশন দেওয়া পার্টিশনে ফাইল সিস্টেম খুঁজে পেতে হবে।

এখনও পর্যন্ত আমার কাছে এটি রয়েছে:

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}
}

এটি কেবলমাত্র একটি হার্ড ড্রাইভ সহ আমার মেশিনে দুর্দান্ত কাজ করেছে, তবে এটি লাইভসিডি-তে চালিত আমার ভিএম-তে চালিত হওয়ার পরে (স্পষ্টতই) ব্যর্থ হয়েছিল (লাইভসিডিটি অন্য ড্রাইভ, / ডিভ / এসআর0 হিসাবে নেওয়া হয়েছিল)।

আমি চেষ্টা করেছি যে কয়েকটি হ্যাক সম্পর্কে চিন্তা করেছি:

  • mount $partition; grep $partition /etc/mtab | awk ...
  • ব্যবহারের parted -mlsহলেও পার্টিশনটি আমি চালাক স্ক্রিপ্টিং সঙ্গে যত্নশীল বৈঠাচালনা আউট, তারপর পার্স হিসাবে আমি ইতিমধ্যে scriptt না

এটি করার আরও ভাল, সহজ উপায় কি আছে? আমার আগ্রহী পার্টিশনগুলি আমার কাছে ইতিমধ্যে রয়েছে এবং আমার কেবল তাদের ফাইল সিস্টেমগুলি অনুসন্ধান করতে হবে (পাশাপাশি উপলভ্য অদলবদলও সন্ধান করতে হবে)।


3
@ মাইকেল না, এই প্রশ্নটি একটি মাউন্ট করা ফাইল সিস্টেমের দিকে তাকিয়ে আছে। আপনি যখন ফাইল সিস্টেমটি মাউন্ট করতে পারেন তারপরে দেখুন এটি কী ধরণের হিসাবে সেট করা আছে, এটি ধীর,
দৃust়

উত্তর:


16

আমি মনে করি আমি উত্তরটি পেয়েছি: blkid

ম্যান পৃষ্ঠা থেকে:

Blkid প্রোগ্রামটি libblkid (3) লাইব্রেরির সাথে কাজ করার জন্য কমান্ড-লাইন ইন্টারফেস। এটি কোনও ব্লক ডিভাইস ধারণ করে এমন সামগ্রীর (যেমন ফাইল সিস্টেম বা অদলবদল) প্রকার নির্ধারণ করতে পারে এবং সামগ্রী মেটাডেটা (যেমন লাবেল বা ইউইউডি ফিল্ডস) থেকে বৈশিষ্ট্যগুলি (টোকেন, NAME = মান জোড়া )ও নির্ধারণ করতে পারে।

স্পষ্টতই এটি ফাইল সিস্টেমের ধরণের পাশাপাশি ডিভাইসের নাম প্রিন্ট করে (কিছু অন্যান্য দরকারী তথ্যের পাশাপাশি)। সমস্ত ধরণের ডিভাইসগুলির সাথে তাদের ধরণের তালিকা পেতে:

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

সমস্ত /dev/sd*/ডিভাইস সন্ধান করতে, কেবল একটি গ্রেপ যুক্ত করুন:

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

তারপরে কেবল cutবা awkআপনার যা প্রয়োজন তা পেতে।


11
ব্লকিড আপনার নিজের যা প্রয়োজন তা ফিল্টার করতে পারে - সেড / গ্রেপ / অ্যাজবি ম্যাজিকের প্রয়োজন নেই:blkid -s TYPE -o value /dev/sda3
পেটর উজেল

@ পেট্রুজেল - দুর্দান্ত! ঠিক আমি যা খুঁজছিলাম!
বেটগ্যামিট

2
sudoআপনি রুট না হলে সঙ্গে চালাতে ভুলবেন না! এটি আমাকে ধরা দিয়েছে কারণ blkidকোনও ত্রুটি বার্তা মুদ্রণ করে না এবং স্ট্যাটাস কোড 0 দিয়ে প্রস্থান করে না যদি এটি ব্লক ডিভাইসগুলিতে অ্যাক্সেস করতে না পারে ...
আসফান্দ কাজী

পাইপ grepদেওয়ার খুব কমই দরকার আছে sedgrep foo | sed 's/pattern/repl/'আরও পরিষ্কারভাবে লেখা হয়েছেsed '/foo/s/pattern/repl/'
উইলিয়াম পার্সেল

9

file -s /path/to/device ডিস্ক / পার্টিশন / স্লাইসে ফাইল সিস্টেম সনাক্ত করবে।

একটি লা:

[root@node2 ~]# file -s /dev/mapper/VolGroup00-LogVol00
/dev/mapper/VolGroup00-LogVol00: Linux rev 1.0 ext3 filesystem data (needs journa recovery) (large files)
[root@node2 ~]# file -s /dev/mapper/coraid--pool-coraid--lv1 
/dev/mapper/coraid--pool-coraid--lv1: Linux GFS2 Filesystem (blocksize 4096, lockproto lock_dlm)
[root@node2 ~]# file -s /dev/mapper/coraid--pool-coraid--lv2 
/dev/mapper/coraid--pool-coraid--lv2: SGI XFS filesystem data (blksz 4096, inosz 256, v2 dirs)

কমপক্ষে, লিনাক্সে এটি করে।


কোনও স্ক্রিপ্ট থেকে ফাইল সিস্টেমের ধরণের নির্ভরযোগ্যভাবে ফিল্টার করার কোনও উপায় আছে কি?
বেটগ্যামিট

আপনি ফিল্টার সিস্টেমের পুরো নাম যথেষ্ট পরিমাণে ফিল্টার করেছেন কিনা তার উপর নির্ভর করে | cut -d: -f2 | cut -d( -f1বা কিছু হিসাবে । এটি ঠিক তেমন সুন্দর নয় blkid, এটি নিশ্চিতভাবে। :)
টিম কেনেডি

2

কেবল ব্লক ডিভাইসের টিওয়াইপি ট্যাগ দেখান, এবং কেবল তার মানটি দেয়:

blkid -s TYPE -o value "$device"

উদাহরণ:

$ blkid -s TYPE -o value /dev/mapper/vg_svelte-home 
btrfs

0

একটি মাধ্যমিক বিকল্প যা অনেকগুলি ফাইল সিস্টেমের সাথে কাজ করে এবং এমন কাঠামোগত ক্ষতিগ্রস্থ ফাইল সিস্টেমগুলির সাথে কাজ করার সুবিধাও রয়েছে testdisk। (আপনি sudo apt install testdiskএটি ইনস্টল করতে চালাতে পারেন ))

এটির মতো কেবল ফাইল সিস্টেম টাইপ করতে এটি স্ক্রিপ্ট করুন:

$ testdisk /list "$path_to_partition" | grep " P " | awk '{print $2}'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.