কিভাবে বাশ স্ক্রিপ্ট ব্যবহার করে একটি পার্টিশন তৈরি এবং ফর্ম্যাট করবেন?


62

বাশ স্ক্রিপ্ট ব্যবহার করে কোনও পার্টিশন তৈরি ও বিন্যাস করার কোনও উপায় আছে কি?

আমি মনে করি এটি fdisk দিয়ে করা যেতে পারে তবে আমি কীভাবে বাড স্ক্রিপ্ট থেকে fdisk শেলের মধ্যে কমান্ডগুলি ফিড করতে পারি তারপরে fdisk শেল থেকে প্রস্থান করব।

আমি একটি পার্টিশন তৈরি করতে চাইছি তারপর এটিকে বাশ এর মধ্যে থেকে এনটিএফএসে ফর্ম্যাট করব।

উত্তর:


70

পূর্ববর্তী পরামর্শগুলির মতো, ফিডস্কে কমান্ড পাইপ করা, আমি পরবর্তী রক্ষণাবেক্ষণকারীদের বিশদ রাখার জন্য এই পদ্ধতিকে দরকারী বলে মনে করেছি। সিডি বিটস fdisk ইনপুট পাওয়ার আগে সমস্ত মন্তব্য মুছে ফেলা হয়।

# to create the partitions programatically (rather than manually)
# we're going to simulate the manual input to fdisk
# The sed script strips off all the comments so that we can 
# document what we're doing in-line with the actual commands
# Note that a blank line (commented as "defualt" will send a empty
# line terminated with a newline to take the fdisk default.
sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
  o # clear the in memory partition table
  n # new partition
  p # primary partition
  1 # partition number 1
    # default - start at beginning of disk 
  +100M # 100 MB boot parttion
  n # new partition
  p # primary partition
  2 # partion number 2
    # default, start immediately after preceding partition
    # default, extend partition to end of disk
  a # make a partition bootable
  1 # bootable partition is partition 1 -- /dev/sda1
  p # print the in-memory partition table
  w # write the partition table
  q # and we're done
EOF

3
আমি পুরোপুরি একমত. অন্যদের পড়ার জন্য আপনার কাজের নথি করুন।
এরিক ডানকান

1
নোট করুন প্রতিটি লাইনে আপনার একটি শীর্ষস্থানীয় ট্যাব থাকতে হবে।
স্টু

2
আপনি কি একটি বড় সতর্কতা স্থাপন করবেন যে @ এসটিইউ উল্লিখিত হিসাবে প্রতিটি কমান্ড অক্ষর লাইনে একটি ট্যাব প্রয়োজন? আমাকে কিছুক্ষণের জন্য ডিবাগ করতে হয়েছিল কারণ অনুলিপি-এবং-পেস্ট ট্যাবগুলিকে উপেক্ষা করে এবং তাদের স্থানগুলির সাথে প্রতিস্থাপন করে, সুতরাং রেজেক্স কমান্ড লাইনের সাথে মেলে না।
আনুষ্ঠানিকভাবে

9
ট্যাব সম্পর্কে সতর্কতার পরিবর্তে, আমি অগ্রণী হোয়াইটস্পেস (কেবলমাত্র ট্যাবগুলি নয়) ফেলে দেওয়ার জন্য সেডটি সংশোধন করেছি এবং fdisk কমান্ডের পরে কোনও ট্যাব প্রত্যাশা করব না। এটি কাটা এবং আরও ভাল আটকানো উচিত। @ সেরেমসেম - ভাল প্রতিক্রিয়া এবং আপনার কোনও ডিবাগ সময় ঘটিয়েছে বলে দুঃখিত।
ব্যবহারকারী 2070305

3
sfdiskএর চেয়ে বেশি অটোমেশন বান্ধবfdisk
স্পুডার

64

sfdisk

sfdisk এর স্ক্রিপ্টেড সংস্করণ fdisk

এটা তোলে অংশutil-linux , ঠিক এরকমই fdisk, তাই প্রাপ্যতা একই হতে হবে।

একক পার্টিশন সহ একটি পার্টিশন টেবিল যা পুরো ডিস্কটি নিয়ে থাকে তা দিয়ে তৈরি করা যেতে পারে:

echo 'type=83' | sudo sfdisk /dev/sdX

এবং আরও জটিল পার্টিশন টেবিল নীচে ব্যাখ্যা করা হয়েছে।

উদাহরণ স্ক্রিপ্ট তৈরি করতে, আপনার ডিস্কগুলির একটি সেটআপ করুন:

sudo sfdisk -d /dev/sda > sda.sfdisk

আমার লেনোভো টি 430 উইন্ডোজ 7 / উবুন্টু দ্বৈত বুটের নমুনা আউটপুট:

label: dos
label-id: 0x7ddcbf7d
device: /dev/sda
unit: sectors

/dev/sda1 : start=        2048, size=     3072000, type=7, bootable
/dev/sda2 : start=     3074048, size=   195430105, type=7
/dev/sda3 : start=   948099072, size=    28672000, type=7
/dev/sda4 : start=   198504446, size=   749594626, type=5
/dev/sda5 : start=   198504448, size=   618891264, type=83
/dev/sda6 : start=   940277760, size=     7821312, type=82
/dev/sda7 : start=   817397760, size=    61437952, type=83
/dev/sda8 : start=   878837760, size=    61437500, type=83

স্ক্রিপ্টটি কোনও ফাইলে সংরক্ষণ করা হয়ে গেলে আপনি এটি sdXদিয়ে এটি প্রয়োগ করতে পারেন :

sudo sfdisk /dev/sdX < sda.sfdisk

জন্য sfdiskইনপুট, আপনি শুধু ডিভাইসের নাম বাদ, এবং টাইপ লাইনের ব্যবহার করতে পারেন:

start=        2048, size=     3072000, type=7, bootable

এগুলি উপস্থিত থাকলে তা উপেক্ষা করা হয় এবং কমান্ড লাইন যুক্তি থেকে ডিভাইসের নাম নেওয়া হয়।

কিছু ব্যাখ্যা:

  • শিরোনাম লাইন: সমস্ত alচ্ছিক:
  • বিভাজন রেখা:

    • start: পার্টিশনটি শুরু হয় এমন ডিস্কের ভিতরে অফসেট করুন।

      start খুব ভাল ডিফল্ট রয়েছে এবং প্রায়শই বাদ দেওয়া যায়:

      • প্রথম লাইনে, start2048, অর্থাৎ 1Mb (2048 + 512), যা ডিস্কের সামঞ্জস্যের জন্য বুদ্ধিমান ডিফল্ট
      • startপ্রথম অবিকৃত স্থানে আরও ডিফল্ট
    • size: man sfdiskবলেন: The default value of size indicates "as much as possible"। সুতরাং একক পার্টিশন দিয়ে ডিস্কটি পূরণ করতে:/dev/sda : start=2048, type=83

    • type: প্রতিটি পার্টিশন প্রবেশের জন্য বুট সেক্টরে ম্যাজিক বাইট সঞ্চিত । সম্ভাব্য মান: https://en.wikedia.org/wiki/Partition_type এই উদাহরণে আমরা পর্যবেক্ষণ করি:
      • 7( sda1, 2এবং 3): ফাইল সিস্টেম উইন্ডোজ সমর্থন করে। ইনস্টল করা উইন্ডোজ স্টাফ এবং লেনভো পুনরুদ্ধারের পার্টিশন। sudo blkidলেবেলগুলি তাদের সনাক্ত করতে সহায়তা করে।
      • 5( sda4): প্রসারিত প্রাথমিক পার্টিশন, এতে অন্যান্য লজিক্যাল পার্টিশন থাকবে (কারণ আমাদের এমবিআর দিয়ে কেবল 4 টি প্রাথমিক পার্টিশন থাকতে পারে)
      • 83( sda5,, 7এবং 8): লিনাক্স সমর্থন করে এমন পার্টিশন। আমার জন্য এক homeএবং দুটি উবুন্টু সংস্করণ সহ দুটি মূল
      • 82( sd6): অদলবদল

fdiskকমান্ডটি sfdiskসহ স্ক্রিপ্টগুলিও পড়তে পারে I, যা পারস্পরিক ইন্টারেক্টিভ fdiskসেশনের সময় এগুলি "উত্স" দেয়, পার্টিশনটি লেখার আগে আপনাকে আরও স্বনির্ধারণ করতে দেয়।

উবুন্টু 16.04, sfdisk2.27.1 এ পরীক্ষিত ।

পার্টিশনগুলি বিন্যাস ছাড়াই একটি চিত্র ফাইল বিন্যাস করুন sudo

sfdiskআপনার হার্ড ডিস্কগুলি উড়িয়ে না দিয়ে ব্যবহার শেখার এটি একটি ভাল উপায় : https://stackoverflow.com বিশেষাধিকার / 52850819 # 52850819


4
ওএমজি এটি আশ্চর্যজনক। আমি এর আগে এফডিস্ক ব্যবহার করেছি তবে আপনি যদি দুর্ঘটনাক্রমে ঠিক ইতিমধ্যে একটি পার্টিশন যেখানেই অবতরণ করেন তবে এটি ব্যবহারকারীর কাছ থেকে যাচাইকরণ চাইবে যা সাধারণত প্রয়োজন হয় না, যা সফল হয়। sfdisk দুর্দান্ত, ধন্যবাদ!
তাবারকেলি

3
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত
শ্রুউমাউস

55

fdiskথেকে সার্চ stdin তাই আপনি শুধু এটা উপযুক্ত কমান্ড ভোজন করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিতটি পার্টিশন টেবিলটি সাফ করে, যদি সেখানে একটি থাকে এবং একটি নতুন পার্টিশন থাকে যা একটি একক পার্টিশন থাকে; পুরো ডিস্ক:

(
echo o # Create a new empty DOS partition table
echo n # Add a new partition
echo p # Primary partition
echo 1 # Partition number
echo   # First sector (Accept default: 1)
echo   # Last sector (Accept default: varies)
echo w # Write changes
) | sudo fdisk

আমি আপনাকে যা কাজ করতে চাইবে তা করার পরামর্শ দিচ্ছি, আপনি যা টাইপ করছেন তা রেকর্ডিং যাতে আপনি এটি পুনরুত্পাদন করতে পারেন।


4
যদিও স্বীকৃত উত্তরের চেয়ে ইকো কমান্ডগুলির সাথে কিছুটা আরও ভার্বোজ রয়েছে, এটি যাদু এবং অচল মনে হয়।
হেনরি হাইকিনেন

1
আমি ব্যক্তিগতভাবে সিস্টেমে ধারাবাহিকভাবে আচরণ করে এমন কিছু ব্যবহার করার অভ্যাসের printfপরিবর্তে ব্যবহারের পরামর্শ দেব echo
19২২ এ 22

37

আপনি এটি বেশ কয়েকটি কমান্ডের সাহায্যে করতে পারেন , একাধিক প্রতিধ্বনিগুলির পরিবর্তে অন্তর int n ব্যবহার করুন।

echo -e "o\nn\np\n1\n\n\nw" | fdisk /dev/sda

এটি অন্যদের তুলনায় আরও পরিশ্রুত, তবে দুর্ভাগ্যবশত কেবল বাশ দিয়ে কাজ করবে বলে মনে হচ্ছে।
bk138

এটি ছাই / ব্যস্তবক্সেও কাজ করছে।
kikeenrique

2
এর \nপরে আর কি দরকার w?
কিয়ান চেন

6
এটি কাজ করে তবে ভয়াবহ :-)
সিরো সান্তিলি 事件 改造 中心 法轮功 六四 事件

2
@ এলজস কিয়ানচেন: না, কারণ echoস্বয়ংক্রিয়ভাবে একটি নতুন লাইন দিয়ে লাইনটি শেষ করে ( -nবিকল্পটি ব্যবহার না করা হলে)
ইউডো জি

5

আপনি স্ক্রিপ্ট করতে পারেন fdisk

(echo n; echo p; echo 1; echo 1; echo 200; echo w) | fdisk /dev/sdc

এটি একটি 200 এমবি পার্টিশন তৈরি করে /dev/sdc


মার্জিত উত্তর!
গঙ্গাধর জান্নু

5

Fdisk- এ পাইপিং কমান্ডগুলি অন্য ব্যক্তিদের দ্বারা ব্যাখ্যা করার মতো কার্যকরভাবে কাজ করে তবে এইভাবে কিছুটা মার্জিত এবং পাঠযোগ্য:

fdisk /dev/sdc <<EOF
n
p
1


w
EOF

(অস্থায়ী) ফাইল থেকে পাইপিংও কাজ করে:

fdisk /dev/sdc < /tmp/fdisk.cmds

এই আমার ভোট পায়। এটি পরিষ্কার এবং চলমান ভাষ্য দিয়ে দূষিত নয়।
ডেভিড বেটজ

5

একটি নতুন ডিস্কলেবল টাইপ জিপিটি তৈরি করুন:

sudo /sbin/parted /dev/xvdf mklabel gpt --script

ডিস্ক বিভাজন:

sudo /sbin/parted /dev/xvdf mkpart primary 0% 100% --script


আপনাকে ধন্যবাদ, এটি আমার জন্য একমাত্র পরিষ্কার সমাধান কারণ এফডিস্কে কোনও ধরণের "স্পেস অপেরা.ডোকেক্স" পাইপিংয়ের অন্তর্ভুক্ত নয়।
বেনিবর

1
printf 'o\nn\np\n1\n\n\nw' | fdisk /dev/sda

2
নতুন ব্যবহারকারীরা যে সাধারণ ভুল করেন তা হ'ল সমস্যাটি কীভাবে সমাধান করা যায় তার বিশদ ছাড়াই উত্তর দেওয়া। উত্তরগুলি বিশদ হতে হবে এবং প্রয়োজনীয় হিসাবে উল্লেখগুলি অন্তর্ভুক্ত করা উচিত। আপনার উত্তর কেন বৈধ তা বিশদ অন্তর্ভুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করতে কয়েক মিনিট সময় নিন। আপনার যদি কিছু সাহায্যের প্রয়োজন হয় তবে পড়ুন আমি কীভাবে একটি ভাল উত্তর লিখব? । এছাড়াও, দয়া করে উপলব্ধি করুন যে আপনি একটি খুব পুরানো প্রশ্নের উত্তর পোস্ট করেছেন যার একটি স্বীকৃত উত্তর রয়েছে। যদিও এটি করার ক্ষেত্রে ভুল লক্ষ্য করা হচ্ছে, আপনি ওপি থেকে কোনও প্রতিক্রিয়া পেতে পারেন না।
চার্লিআরবি


0

অন্যান্য লোকদের উত্তরের উপর ভিত্তি করে অংশটি তৈরি করতে স্ক্রিপ্টটি fdisk ব্যবহার করে।

স্ক্রিপ্টে নিম্নলিখিতগুলি পরিবর্তন করুন:

NUM_PARTITIONS = 5

PARTITION_SIZE = "+ 10 জি"

স্ক্রিপ্ট পরে উদাহরণ ব্যবহার দেওয়া হয়।

#!/bin/bash
if [ $# -eq 0 ]
then
  echo "input the device"
  exit
fi

NUM_PARTITIONS=5
PARTITION_SIZE="+10G"    

SED_STRING="o"
TAIL="p
w
q
"

NEW_LINE="
"
LETTER_n="n"
EXTENDED_PART_NUM=4
TGTDEV=$1

SED_STRING="$SED_STRING$NEW_LINE"
for i in $(seq $NUM_PARTITIONS)
do
  if [ $i -lt $EXTENDED_PART_NUM ]
  then
    SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
  fi
  if [ $i -eq $EXTENDED_PART_NUM ]
  then
    SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$NEW_LINE$NEW_LINE"
    SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
  fi
  if [ $i -gt $EXTENDED_PART_NUM ]
  then
    SED_STRING="$SED_STRING$LETTER_n$NEW_LINE$NEW_LINE$PARTITION_SIZE$NEW_LINE"
  fi
done
SED_STRING="$SED_STRING$TAIL"

sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${TGTDEV}
  $SED_STRING
EOF

সাথে চালানো:

sudo sh mk_partition.sh / dev / sdxxx


-2
#!/bin/sh
hdd="/dev/hda /dev/hdb /dev/hdc"
for i in $hdd;do
echo "n
p
1


w
"|fdisk $i;mkfs.ext3 "$i1";done 

আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেন। কেবলমাত্র আপনার নিজের পার্টিশনগুলি সংজ্ঞায়িত করা হয়েছে তা নিশ্চিত করুন hdd। মধ্যে 2 ফাঁকা স্পেস আছে 1এবং w; ডিফল্ট মান গ্রহণের জন্য তাদের সেখানে থাকা দরকার।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.