4096-বাইট সেক্টর ডিস্কে 512-বাইট সেক্টরের এমবিআর কীভাবে সংশোধন করবেন?


23

চূড়ান্ত আপডেট:

এই সমস্যাটি সমাধানের জন্য আমার কী করা দরকার তা আমি ইতিমধ্যে জানতাম; আমি কীভাবে এটি করতে জানি না। আমি আশা করছিলাম যে স্বয়ংক্রিয়ভাবে এটি করার জন্য কোনও প্রস্তুত সরঞ্জাম রয়েছে - তবে কোনওটিই খুঁজে পেল না। আমি রডের উত্তর গ্রহণ করছি কারণ আমার সমস্যা সরাসরি সমাধান না করেও এটি সেক্টর আকারের ইস্যুতে খুব ভাল পটভূমি দেয় এবং আমাকে আত্মবিশ্বাস দেয় যে বিষয়টি সত্যই বিভাজন সারিবদ্ধকরণ এবং সম্বোধন was যারা এই প্রশ্নটিতে একই সমস্যা নিয়ে আসে তাদের জন্য, কিছু করার আগে মন্তব্য সহ, ভালভাবে এবং সাবধানতার সাথে এটি পড়ুন।


প্রারম্ভে

আমার একটি কম্পিউটার ছিল এবং আরও জায়গার প্রয়োজন ছিলাম আমি একটি নতুন 500 গিগাবাইট ড্রাইভ এবং একটি ইউএসবি ঘের কিনেছি। শীঘ্রই আমি লক্ষ্য করেছি যে আমি যদি ঘেরটিতে ড্রাইভটি ভাগ করে কম্পিউটারে নিয়ে যাই তবে এটি পার্টিশনগুলি (এবং তদ্বিপরীত) সনাক্ত করতে পারে না। আমি ধরেছিলাম এটি ঘেরের সাথে সমস্যা ছিল এবং এটি নিয়ে চিন্তা করবেন না।

তারপরে, ট্র্যাজেডি

একটি দুর্দান্ত দিন, আমার কম্পিউটারটি আর চালু না করার সিদ্ধান্ত নিয়েছে। মাদারবোর্ড ঘুরিয়েছে (আনব্র্যান্ডহীন, এটির উপরে ছাপা কেবল একটি বড় মেড ইন চিন্ড) মারা গেছে। আমি এটিকে ফাইল-সার্ভার হিসাবে ব্যবহার করছি এবং 500 গিগাবাইট ড্রাইভ এখন এমন ডেটা পূর্ণ যা আমি হারাতে পারি না। আমি এখন ভেঙে পড়েছি এবং নতুন কম্পিউটারের সামর্থ্য নেই, তাই আমার একমাত্র আশা ছিল "ত্রুটিযুক্ত" ইউএসবি ঘের।

তদন্ত

বেশ কয়েকটি লিনাক্স ডিস্ট্রিবিউশন, একটি ল্যাপটপ, ভার্চুয়ালবক্স এবং ঘের দিয়ে সজ্জিত আমি এই বিষয়ে একটি ফরেনসিক বিশ্লেষণ করেছি। dmesg রিপোর্ট করেছে পার্টিশনের আকার ড্রাইভের শেষের বাইরে ছিল। সুতরাং আমি হার্ড ড্রাইভের ডেটাশিটগুলি দিয়েছিলাম, স্ক্র্যাচ থেকে সেক্টর গণনা করা হয়েছে, ডিডি দিয়ে ম্যানুয়ালি ড্রাইভের সীমানা পরীক্ষা করেছি এবং সবকিছু ঠিক আছে, যতক্ষণ না আমি fdisk আপ আপ করেছি এবং এটি বলেছে:

    Note: Sector size is 4096 (not 512).

কতটা বিনয়ী fdisk। এই "নোট" সমস্ত ইস্যুর মূল ছিল। আরও কিছু ঝাঁকুনির পরে এই সিদ্ধান্তগুলি টানা হয়েছিল:

  • ইউএসবি ঘেরটি ত্রুটিযুক্ত নয়।

  • এখন মৃত মাদারবোর্ডের সাটা নিয়ামক হ'ল কমপক্ষে "অদ্ভুত"। এটি অপারেটিং সিস্টেমে 4096-বাইট সেক্টর রিপোর্ট করেনি, সুতরাং ওএস সুখে 512-বাইট সেক্টর ঠিকানা ব্যবহার করে এমবিআর তৈরি করেছে।

  • এখন আমি যখন পার্টিশনটি অ্যাক্সেস করার চেষ্টা করি তখন ওএস 4096-বাইট সেক্টর ড্রাইভে 512-বাইট ভিত্তিক ঠিকানাগুলি ব্যবহার করার চেষ্টা করে এবং অবশ্যই এটি কাজ করবে না।

প্রশ্নটি

  • সুতরাং, আমি কীভাবে এমবিআরে ঠিকানাগুলি সংশোধন করতে পারি যাতে তারা হেক্স-সম্পাদকের মাধ্যমে এমবিআর ম্যানুয়ালি সম্পাদনা করা বাদ দিয়ে 4096-বাইট সেক্টরের আকারে বৈধ হয় এবং

  • পার্টিশনগুলি 4096-বাইট সেক্টরের জন্য প্রান্তিক হয় না। এগুলিকে অন্য ড্রাইভে অনুলিপি করা বাদ দিয়ে সারিবদ্ধ করার জন্য এমন কিছু সরঞ্জাম উপলব্ধ রয়েছে? (আমার কাছে অতিরিক্ত ড্রাইভ নেই), অথবা আমার কি এমন কোনও সরঞ্জাম তৈরি করতে হবে যা ডেটা "শিফট" করে একবারে কিছুটা অংশ সরিয়ে ফেলবে? পার্টিশনগুলি ext3 হয়।

ধন্যবাদ!

হালনাগাদ:

আমি দেখতে পেলাম যে এই প্রশ্নে পার্টিশনটি স্থানান্তর করতে ডিডি ব্যবহারের একটি চতুর উপায় রয়েছে: জিএনইউ / লিনাক্সে একটি পার্টিশন কীভাবে সরানো যায়? তবে আমি জানি না এটি কোনও সেক্টরের টুকরোতে কাজ করবে কিনা। আমি এখনই এটি পরীক্ষা করতে পারছি না তবে কিছু সময় পেলে করব।

আপডেট 2:

সুতরাং আমি সফলভাবে উপরের পদ্ধতিটি ব্যবহার করে পার্টিশনটি সারিবদ্ধ করেছি এবং একটি হেক্স সম্পাদক সম্পাদনায় এমবিআর হাতে সম্পাদনা করেছি। এইচডিডি পুনরায় প্লাগ করার সাথে সাথে বুম পার্টিশনটি স্বয়ংক্রিয়ভাবে মাউন্ট হয়ে গেল! যদিও আমি এটির প্রস্তাব দিচ্ছি না, প্রক্রিয়া চলাকালীন আমার / ও ত্রুটি ছিল এবং আমি সবকিছু হারাতে পারি, রডের উত্তর সম্পর্কে মন্তব্য দেখুন। অন্য বিভাজনের জন্য আমি ঝুঁকি নেব না এবং একটি পুরাতন এইচডিডি ব্যবহার করব এবং ডেটা অনুলিপি করে এবং আবার আলাদা অবস্থানে পেস্ট করে একসাথে খণ্ডগুলি সারিবদ্ধ করব।


জানেন না তবে একটি মন্তব্য- মনে হচ্ছে কম্পিউটারগুলি কীভাবে কাজ করে তা আপনি পাঠ দিতে পারেন! (এবং তারপরে যদি এটি সমস্যার সমাধান করতে সহায়তা করে, নগদ দিয়ে আরও একটি হার্ড ড্রাইভ
কিনুন

@ বার্লপ ধন্যবাদ! ) আমি এই পার্টিশন হার্ড উপায় ঠিক করতে হবে =); কিন্তু আমি ইতিমধ্যে আমার কাজ এবং কলেজ মধ্যে আমার দিন বিভক্ত করতে তাই একটি দ্বিতীয় কাজ কোন যেতে যেতে ডান এখন আছে
NothingsImpossible

1
এটি 6.০০ টায় রয়েছেন এবং আমি এই সমস্যাটি ঘিরে সমস্ত রাত অতিবাহিত করেছি!
লিওনেল

1
ঠিক আছে, সুতরাং আমার বিপরীত সমস্যা আছে: ঘেরটি ব্যবহার করে আমার 1TB ডিস্ক ফর্ম্যাট হয়েছে। সুতরাং এটি প্রতি সেক্টরের ঠিকানায় 4096 বাইট ব্যবহার করে ফর্ম্যাট করা হয়েছিল। আমি হাতে এমবিআর সম্পাদনা করতে স্বাচ্ছন্দ্য বোধ করি না। এবং আমার সরাসরি এসটিএডি ব্যবহার করতে হবে (সেক্টর প্রতি 512 বাইট) কোনও পরামর্শ?
লিওনেল

1
@ লিওনেল আপনি fdiskএমবিআর সম্পাদনা করতে লিনাক্স ব্যবহার করতে পারেন (আমি এটি পরে শিখেছি, হেক্স-সম্পাদকদের দরকার নেই :)) আপনি প্রতিটি প্রবেশের সূচনা পয়েন্ট এবং আকার পরিবর্তন করতে পারেন, এবং প্রয়োগের আগে পরিবর্তনগুলি পর্যালোচনা করতে পারেন। সুতরাং: শুরু করুন fdisk, বর্তমান কনফিগারেশনটি নোট করুন (বা আরও ভাল, এর সাথে এমবিআর ব্যাকআপ করুন dd), সূচনা ঠিকানা এবং আকারের মানগুলি 8 দ্বারা গুণিত করুন এবং সেগুলি পরিবর্তন করুন। ক্যালকুলেটর দিয়ে সবকিছু পরীক্ষা করে দেখুন এবং মানগুলি কী বোঝায় তা নিশ্চিত হন। আপনি সেই আকার = শেষটি দেখতে পাবেন - শুরু +1 এবং এটি fdisk1000-সেক্টর ইউনিটে আকারটি দেখায়, তাই আপনাকে আসল মান ইত্যাদির জন্য বিশেষজ্ঞের মোডটি চালু করতে হতে পারে
নথিংসআইম্পিসিভ

উত্তর:


24

খাত আকারের সমস্যাগুলি বেশ জটিল হয়ে উঠছে। ২০০৯ এর শেষ অবধি, বেশিরভাগ হার্ড ডিস্ক 512-বাইট সেক্টর ব্যবহার করেছিল এবং তা ছিল। ২০০৯ এর শেষের দিকে, ডিস্ক নির্মাতারা তথাকথিত অ্যাডভান্সড ফরম্যাট (এএফ) ডিস্ক চালু করা শুরু করে , যা 4096-বাইট সেক্টর ব্যবহার করে। এই প্রথম এএফ ডিস্কগুলি (এবং, এএফাইক, সমস্ত এএফ ডিস্ক) আজ কম্পিউটারে একটি ইন্টারফেস উপস্থাপন করে যা প্রতিটি 4096-বাইট শারীরিক ক্ষেত্রকে আটটি 512-বাইট লজিক্যাল সেক্টরে বিভক্ত হিসাবে দেখায় । এই রূপান্তরটি অনেক বায়োসিস সহ পুরানো সরঞ্জামগুলিকে সক্ষম করে, যা কাজ চালিয়ে যাওয়ার জন্য 512-বাইট অনুমান দিয়ে নির্মিত হয়েছিল। আপনার ডিস্কটি এএফ ব্যবহার করে কিনা তা আমি জানি না, তবে উভয় ক্ষেত্রেই এটি অবশ্যই একটি 512-বাইট লজিক্যাল সেক্টর আকার ব্যবহার করে যার অর্থ OS এর ইন্টারফেসটি 512-বাইট সেক্টর ব্যবহার করা উচিত।

জটিল বিষয়গুলি হ'ল নির্দিষ্ট ইউএসবি ডিস্ক সংযুক্তি। এই ঘেরগুলির মধ্যে কয়েকটি এএফের বিপরীত কাজ করে: তারা আটটি ডিস্ক সেক্টর নেয় এবং সেগুলি একটি নতুন 4096-বাইট সেক্টরে বান্ডিল করে। আমি নিশ্চিত নই যে এই পদক্ষেপের পিছনে যুক্তিটি কী, তবে একটি ব্যবহারিক সুবিধা হ'ল পুরানো এমবিআর পার্টিশন সিস্টেমের সাথে 2TiB এর চেয়ে বড় ডিস্ক ব্যবহার করা যেতে পারে। একটি প্রধান অসুবিধা হ'ল এই ঘেরগুলির মধ্যে একটিতে বিভক্ত একটি ডিস্ক সরাসরি বা কোনও ঘেরে ব্যবহার করা যাবে না যা এই ধরণের অনুবাদ করে না। তেমনি, এই অনুবাদ ব্যতীত প্রস্তুত একটি ডিস্ক ব্যবহার করা যাবে না যখন এটি কোনও ঘেরে স্থানান্তরিত হয়। মনে রাখবেন যে এই সমস্যাটি এমবিআর থেকেও ভাল চলেছে; আপনার ডিস্কটি প্রথম পার্টিশনটি (512-বাইট) সেক্টর 2048 থেকে শুরু হিসাবে চিহ্নিত করতে পারে, তবে যদি আপনার ওএস (4096-বাইট) সেক্টর 2048 সন্ধান করতে হয়,সেই পার্টিশনের শুরুটি খুঁজে বার করুন! আপনি এই সমস্যায় পড়েছেন। এই হিসাবে, আপনার প্রাথমিক ধারণা যে এটি আপনার ইউএসবি ঘেরের দোষটি আপনার সাম্প্রতিক ভাবার চেয়ে বেশি যে আপনার মাদারবোর্ডটি গোলমাল করেছে। আমি কখনও মাদারবোর্ডের সেক্টরের আকারকে এভাবে অনুবাদ করার কথা শুনিনি। (কিছু হার্ডওয়্যার RAID ডিভাইস যদিও এটি করে))

লিনাক্সকে সেক্টরের আকার সম্পর্কে তার ধারণাটি সামঞ্জস্য করতে বাধ্য করার কোনও উপায় আমি জানি না, তবে আপনার যদি পর্যাপ্ত ডিস্কের জায়গা থাকে, অন্য ডিস্কে নিম্ন-স্তরের ডিস্ক অনুলিপি করা সাহায্য করতে পারে। এই ক্ষেত্রে:

dd if=/dev/sdb of=~/image.img

এটি আপনার ডিস্কটি /dev/sdb(ইউএসবি ডিস্ক; প্রয়োজনীয় হিসাবে সামঞ্জস্য করুন) থেকে ফাইলটিতে অনুলিপি করবে ~/image.img। এরপরে আপনি চিত্রটির পার্টিশন মাউন্ট করতে নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করতে পারেন:

#!/bin/bash
gdisk -l $1 > /tmp/mount_image.tmp
let StartSector=`egrep "^   $2|^  $2" /tmp/mount_image.tmp | fmt -u -s | sed -e 's/^[ \t]*//' | head -1 | cut -d " " -f 2`

let StartByte=($StartSector*512)

echo "Mounting partition $2, which begins at sector $StartSector"

mount -o loop,offset=$StartByte $1 $3

rm /tmp/mount_image.tmp

স্ক্রিপ্টটি সংরক্ষণ করুন, বলুন mount_imageএবং এটি এর মতো ব্যবহার করুন:

./mount_image ~/image.img 2 /mnt

এই বিভাগের 2 মাউন্ট হবে image.imgথেকে /mnt। নোট করুন যে স্ক্রিপ্টটি জিপিটি fdisk ( gdisk) -এর উপর নির্ভর করে , যা বেশিরভাগ বন্টন gptfdiskবা বলা একটি প্যাকেজে অন্তর্ভুক্ত থাকে gdisk

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

আমার কাছে ঘটে যাওয়া আরেকটি বিকল্প হ'ল ভার্চুয়ালবক্সের মতো ভার্চুয়াল মেশিন ব্যবহার করার চেষ্টা করা। ডিস্ক ডিভাইসটিতে অ্যাক্সেস করার সময়, কার্যকরভাবে অনুবাদটিকে পূর্বাবস্থায়িত করতে এ জাতীয় সরঞ্জাম 512-বাইট সেক্টরের আকার ধরে নিতে পারে; অথবা আপনি dd if=/dev/sdc of=/dev/sdbভার্চুয়াল মেশিনের মধ্যে ডিস্কের সামগ্রীগুলি কাঁচা (যেমন হিসাবে ) অনুলিপি করতে সক্ষম হতে পারেন, যা সংকোচনের সাথে বিষয়বস্তুগুলি অনুলিপি করতে পারে, এইভাবে চিত্রটিকে মূল ব্যয়গুলির চেয়ে কম ডিস্কের জায়গায় ফিট করতে সক্ষম করে।


খুব অন্তর্দৃষ্টিযুক্ত উত্তর, তবে আমি যা খুঁজছিলাম তা পুরোপুরি নয় .. আমি ইতিমধ্যে ভার্চুয়াল মেশিন পদ্ধতিটি চেষ্টা করেছি তবে এটি অনুবাদটিকে পূর্বাবস্থায় ফেলেনি। আমি সবেমাত্র বাড়িতে পৌঁছেছি, এবং ডিডি ব্যবহার করে প্রথম পার্টিশনটি (একটি ছোট, কম গুরুত্বপূর্ণ একটি) সারিবদ্ধ করার চেষ্টা করব এবং এটি রাতারাতি চলতে দিন। সফল হলে, কেউ উত্তর না দিলে আমি হাত দিয়ে এমবিআর সম্পাদনা করার চেষ্টা করব।
নথিংস ইম্পসিবল

4
এর মাধ্যমে ডিস্কের সামগ্রীগুলিকে সংশোধন করার চেষ্টা করবেন নাdd ! আপনি যদি খুব সাবধান হন না এবং জিনিসগুলি অত্যন্ত ভালভাবেবুঝতে না পারেন(বা অসাধারণ ভাগ্যবান), আপনি এটি ঠিক করার চেয়ে জিনিসটি ট্র্যাশ করার সম্ভাবনা বেশি। আমার সাথে এটি ঘটে যে আপনি পার্টিশন টেবিলটি ব্যবহার করে সামঞ্জস্য করতে সক্ষম হতে পারেনfdisk: মূলটি ব্যাক আপ করুন এবং তারপরে প্রতিটি পার্টিশনের সূচনা পয়েন্টটি 8 দ্বারা বিভক্ত করুন (এবং নিম্নলিখিত পয়েন্টগুলি নিম্নলিখিত পার্টিশনের শুরু পয়েন্টের ঠিক আগে শেষ করতে হবে)। পার্টিশনের স্টার্ট পয়েন্টের মানগুলি 8 এর গুণক হলেই এটি একটি সুযোগ
রোড স্মিথ

1
পবিত্র গরু! তথ্যের জন্য ধন্যবাদ। আমি এখন একদিনের জন্য আমার ম্যাক / উইন্ডোজ এইচডিডিটিকে একটি এসএসডি-তে ক্লোন করার চেষ্টা করেছি এবং শেষ পর্যন্ত আমি বিষয়টি সনাক্ত করতে সক্ষম হয়েছি: রোজউইল সাটা / আইডিই ইউএসবি অ্যাডাপ্টারে আমি এসএসডি সংযোগ করতে ব্যবহার করছিলাম এটি "বিপরীত রূপান্তর সম্পাদন করছিল" "4096-বাইট সেক্টর! সুতরাং এসএসডি-তে জিপিটি + হাইব্রিড এমবিআর ddইউএসবি-এর মাধ্যমে সংযোগের সময় আমি এটির ক্লোন করার পরে বাজে মনে হয়েছিল, এবং আমি ভেবেছিলাম যে ক্লোনটি ব্যর্থ হয়েছে। কিন্তু যখন আমি আমার পুরানো এইচডিডি এর জায়গায় এসএসডিটি সরাসরি আমার মাদারবোর্ডের সাথে সংযুক্ত করেছি, তখন সবকিছু ঠিকঠাক কাজ করেছে!
এলিয়ট

1
আমার আগের মন্তব্যটি সম্পাদনা করতে পারে না, তবে এ্যালাইন সরঞ্জামটি এই ক্ষেত্রে অকেজো, এটি কেবলমাত্র অপ্টিমাইজেশনের উদ্দেশ্যে purposes তবে নোট করুন যে আপনি টেস্টডিস্কটি ব্যবহার করতে পারেন এবং গভীর স্ক্যানের পরে ফাইলগুলি তালিকাবদ্ধ করতে এবং আপনার ডিস্কের সামগ্রী পুনরুদ্ধার করতে P টিপুন (এইভাবে আমি আমার ডেটা পুনরুদ্ধার করেছি, তবে বাইট সেক্টরটি ঠিক করার কোনও উপায় আমি পাইনি আজ...).
চমত্কার

1
একটি আকর্ষণীয় পাঠ্য যা সমস্যার নিশ্চিত করে এবং সমাধানটিতে ইঙ্গিত দেয় (লিনাক্স লুপব্যাক ডিভাইসের মাধ্যমে সেতুটির অনুবাদ অনুকরণ করে): goughlui.com/2013/10/02/… এবং এই জিজ্ঞাসাবাবু / প্রশ্নগুলি / 337693/… । এবং কেবলমাত্র একটি অতিরিক্ত নোট হিসাবে, আমি শারীরিক আকারের সাথে মেলে ধরার জন্য যৌক্তিক আকারটি জোর করে সম্পাদনা করার চেষ্টা করেছি, তবে ড্রাইভটি এখনও স্বীকৃত হয়নি। তবে ফর্ম্যাট করা এটি মাউন্টিং ঠিক করে তবে ফাইলগুলি অবশ্যই হারিয়ে যায়, তাই লুপব্যাক মাউন্টিং বা টেস্টডিস্কের মাধ্যমে আরও ভাল করে পুনরুদ্ধার করুন।
চমত্কার

4

এই স্ক্রিপ্টটি রড স্মিথ প্রস্তাবকে সাধারণীকরণ করেছিল, যখন আপনি কোনও রেইড বা ক্রিপ্টো করেন। কোনও ওয়ারেন্টি নেই এটি উন্নত নির্দ্বিধায়! (এমডিএডএম সম্পর্কে সর্বশেষ অনুসন্ধানের সাথে আপডেট হয়েছে)

#!/bin/sh
#
# This script solve the following problem:
#
# 1. create a GPT partition on a large disk while attached directly via SATA
#    when the device present itself with 512 bytes of block size:
#    sd 3:0:0:0: [sda] 5860533168 512-byte logical blocks: (3.00 TB/2.72 TiB)
#
# 2. try to use a SATA to USB adapter like ID 067b:2773 Prolific Technology, Inc.
#    this present the device with 4096 bytes of block size:
#    sd 19:0:0:0: [sdc] 732566646 4096-byte logical blocks: (3.00 TB/2.72 TiB)
#
# 3. The kernel is unable to read correctly the partition table with
#    the USB adaper.
#
#
# With the current tools (kernel and gdisk) in debian wheezy is
# possible to use losetup to remap the partitions to loop devices so
# you can use them as usual with any filesystem, raid or crypto
#
# I still do not know if this issue is originated by the adapter or by
# the disk and if there are any others workarounds.
#
# Known version of the software:
# $ apt-show-versions linux-image-3.2.0-4-amd64
# linux-image-3.2.0-4-amd64/wheezy uptodate 3.2.54-2
# $ apt-show-versions gdisk
# gdisk/wheezy uptodate 0.8.5-1


attach_device() {

    device="$1";

    MYTMPDIR=`mktemp -d`
    trap "rm -rf $MYTMPDIR" EXIT

    # gdisk on the device use the 4096 sector size
    # but we need to force it to 512
    # this is a knwon workaround from http://superuser.com/a/679800
    # basically we make a copy of the gpt partition table on a file
    dd if="/dev/$device" bs=16384 count=1 of="$MYTMPDIR/gpt" 2> /dev/null

    # we extract the offset and the size of each partition
    #
    # FIXME: the "+ 1" seems strange, but it is needed to get the same
    #        size value from:
    #
    #        blockdev --getsize64
    #
    #        without the "+ 1" some funny things happens, for example
    #        you will not be able to start a recognized md device:
    #
    #        md: loop1 does not have a valid v1.2 superblock, not importing!
    #        md: md_import_device returned -22
    #
    #        even if
    #
    #        mdadm --examine /dev/loop1
    #
    #        does not complaint

    gdisk -l \
     "$MYTMPDIR/gpt" 2> /dev/null | \
     awk '/^ *[0-9]/ {printf "%.0f %.0f\n", $2 * 512, ($3 - $2 + 1) * 512}' > $MYTMPDIR/offset-size

    # we create a loop device with the give offset and size
    while read line;
    do
        offset=$(printf "$line" | cut -d ' ' -f 1);
        size=$(printf "$line" | cut -d ' ' -f 2);
        losetup --verbose --offset "$offset" --sizelimit "$size" `losetup -f` /dev/$device;
    done < $MYTMPDIR/offset-size;
}

detach_device() {

    device="$1";

    for loopdevice in `losetup -a | grep "$device" | cut -d : -f 1`;
    do
        losetup --verbose --detach "$loopdevice";
    done;
}

usage() {
cat <<EOF
Usage:
- $0 -h to print this help
- $0 sda to attach the gpt partitions of sda
- $0 -d sda to detach the gpt partitions of sda
EOF
}


detach=0;

while getopts hd action
do
    case "$action" in
        d) detach=1;;
        h) usage;;
    esac
done
shift $(($OPTIND-1))

if [ $# -ne 1 ];
then
    usage;
fi

if [ "x$detach" = "x0" ]; then
    attach_device $1;
else
    detach_device $1;
fi

ওহো! সুন্দর কাজ!
নথিংস ইম্পসিবল

3

আরেকটি, এটি করার জন্য মোটামুটি সোজা এগিয়ে যাওয়ার উপায়টি হল পার্টডের উদ্ধার ফাংশনটি। এটির জন্য আপনাকে একটি নতুন ডিস্ক লেবেল তৈরি করা প্রয়োজন, সুতরাং এতে ঝুঁকি রয়েছে। পার্টেড সরাসরি ডিস্কে কাজ করে তাই পার্টেড চালানোর আগে প্রয়োজনীয় হিসাবে ব্যাকআপ নিন। তারপরে শুরু করুন:

parted /dev/sdb

পার্টিশন টেবিলটি তৈরি করা হয়েছে তার চেয়ে আলাদা সেক্টরের আকারের সাথে একটি ডিস্ক পড়ার চেষ্টা করার সময় বিভক্ত আপনাকে এই লাইনের সাথে কিছু বলবে:

Error: /dev/sdb: unrecognised disk label                                  

আপনি পূর্বে যা ব্যবহার করেছেন সে অনুযায়ী নতুন এমবিআর বা জিপিটি তৈরি করতে এমকেলেবেল ব্যবহার করুন

(parted) mklabel
New disk label type? mbr

তারপরে আপনার পুরানো পার্টিশনটি অনুসন্ধান করতে উদ্ধার চালান

(parted) rescue
Start? 0
End? 4001GB
Information: A ext4 primary partition was found at 1049kB -> 2000GB.  Do you
want to add it to the partition table?
Yes/No/Cancel? y

আপনার আরও পার্টিশন থাকলে উদ্ধার প্রক্রিয়াটি পুনরাবৃত্তি করুন। আপনি এখন সম্পন্ন হয়েছে।


1
এটি আমার পার্টিশন টেবিলটিকে এমবিআর থেকে জিপিটিতে রূপান্তর করার জন্য পুরোপুরি কাজ করেছিল। এটি করা যাতে আমি ক্লোনড 2 টিবি ডিস্কটি 4TB তে প্রসারিত করতে পারি। আমার পার্টিশনটি সেখানে ঝুলিয়ে রেখে কিছুটা নার্ভাস তবে এটি অন্যান্য পদ্ধতির তুলনায় এত দ্রুত।
অরেগন ট্রেইল

3

আমার যখন এই সমস্যাটি ছিল তখন যখন আমি ডাব্লুডি আমার বইয়ের বাহ্যিক ঘের থেকে 4TB ডিস্ক সরিয়েছি। সমস্যা হল:

  1. এমবিআর পার্টিশন টেবিলটি 8 এবং এর একটি ফ্যাক্টর দ্বারা বন্ধ রয়েছে
  2. এমবিআর পার্টিশন সারণি সেক্টরের আকার 512 হওয়াতে> 2TB হ্যান্ডেল করতে পারে না।

সমাধান: 512 বাইট সেক্টর ব্যবহার করে মানগুলিকে রূপান্তর করে পার্টিশন টেবিলটিকে একটি জিপিটিতে পুনরায় লিখুন।

আমার ক্ষেত্রে বিভাগটি 1MB অফসেটে শুরু হয়েছিল এবং ডিস্কটি শেষ হওয়ার আগে (~ 856 কেবি) সমাপ্ত হয়। এটি ভাল কারণ এরপরে এটি বিভাজনের আগে এমবিআর + জিপিটি (17408 বাইট) এবং ডিস্কের শেষে জিপিটি (16896 বাইট) ব্যাকআপ করার অনুমতি দেয়।

আমি উভয় অঞ্চলের চিত্র কেবলমাত্র (ডিডি ব্যবহার করে) তৈরি করেছি।

আমি আউটপুট নোট fdisk -l /dev/sde

আমি প্রথম পার্টিশনটি মুছতে gdisk ব্যবহার করেছি। আপনি যদি চান তবে আপনি যতটা সম্ভব স্থানটি ব্যবহার করতে আমার মতো করে প্রান্তিককরণ মান 8 (4096) এ পরিবর্তন করতে পারেন। তারপরে, আমি 2048-এ শুরু করে এবং ডিস্কের শেষে একটি নতুন পার্টিশন তৈরি করেছি। আমি পরে ফাইল সিস্টেম বৃদ্ধি করব।

ধন্যবাদ, সেক্টরের আকারের পরিবর্তনটি ফাইল সিস্টেম, এলভিএম, বা এলইউকেএসকে প্রভাবিত করে না।

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