হার্ড ড্রাইভের সর্বশেষ 1MB মুছুন


25

এমন কোনও সহজ আদেশ আছে যা আমি হার্ড ড্রাইভের শেষ 1 এমবি শূন্য করতে ব্যবহার করতে পারি?

ড্রাইভ শুরুর জন্য আমি চাই dd if=/dev/zero of=/dev/sdx bs=1M count=1seekDD সৌন্দর্য জন্য বিকল্প প্রতিশ্রুতি, কিন্তু কেউ ঠিক নির্ধারণ কতদূর আমি নেওয়া উচিত একটি সহজ উপায় আছে?

আমার কাছে একটি হার্ডওয়্যার RAID অ্যাপ্লায়েন্স রয়েছে, যা ড্রাইভের শেষে কিছু RAID কনফিগারেশন সঞ্চয় করে। ড্রাইভগুলি আন-কনফিগার করা হিসাবে দেখতে আমার কাছে RAID অ্যাপ্লায়েন্সের প্রয়োজন, তাই আমি ড্রাইভের পুরো মুছতে সময় ব্যয় না করেই RAID কনফিগারেশনটি সরাতে চাই। আমার কাছে এক ডজন 2 টিবি ড্রাইভ রয়েছে এবং এই সমস্ত ড্রাইভের একটি সম্পূর্ণ মুছতে দীর্ঘ সময় লাগবে।

উত্তর:


22

লিনাক্সের ডিস্কের আকার পাওয়ার সহজতম উপায়টি হ'ল blockdev --getsz:

sudo -s
dd bs=512 if=/dev/zero of=/dev/sdx count=2048 seek=$((`blockdev --getsz /dev/sdx` - 2048))

দুর্দান্ত, আমি জানতাম এমন একটি সরঞ্জাম অবশ্যই আছে যা সহজেই আকারটি পেতে পারে।
জোড়ডেচি

1
আমি সমাধানটি পছন্দ করার সময়, sdaউদাহরণস্বরূপ ব্যবহার করা মারাত্মক বিপজ্জনক, যদি আপনি অনুলিপি করে পেস্ট এবং ক্যারিজের ফেরত অনুলিপি পেতে পরিচালনা করেন। sdxআরও ভাল উপযুক্ত হবে। আমি সাবধানতা অবলম্বন করি তবে কেবল তাদের কারণেই আমি এখনই আমার ডিস্কটি ধ্বংস করি নি।
emk2203

@ emk2203 ভাল পয়েন্ট। আমি কৌতূহলী, এই জাতীয় দৃশ্যের জন্য আপনার কী সতর্কতা অবলম্বন করা উচিত?
হাশিম

1
আমি আটকানোর আগে একটি একক উদ্ধৃতি ব্যবহার। যদি লাইনে কোনও ক্যারেজ রিটার্ন থাকে তবে উদ্ধৃতিটির শেষ নেই বলে শেল প্রম্পটে ধরা পড়ে pt যদি সবকিছু ঠিক থাকে তবে আমি Ctrl-A দিয়ে লাইনের শুরুতে যাই, তারপর উদ্ধৃতিটি মুছুন, তারপরে ফিরে আসুন। বীমা এর জন্য আরও তিনটি কীস্ট্রোক রয়েছে।
emk2203

/ ডিভ / এসডিএক্সের পরিবর্তে, / ডিভ / ডিস্ক / বাই-আইডি / যেমন এনভিএম-এসএএমএসএনজি_এমজেভিএলডাব্লু 1 টিএক্সএক্সএক্সএক্স -000 এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স লিঙ্কগুলি দেখুন। ls -l / dev / ডিস্ক / বাই-আইডি / লিঙ্কটির নাম এবং / dev / sdX এর সাথে লিঙ্ক করবে।
rcpa0

6

প্রতিটি পার্টিশনের আকার পাওয়া যায় /proc/partitions। নিম্নলিখিত কমান্ডটি sdx(কেবি ইউনিটগুলিতে) আকার দেখায় :

awk '$4 == "sdx" {print $3}' </proc/partitions

এভাবে:

dd if=/dev/zero of=/dev/sdx bs=1k count=1024 \
   seek=$(($(awk '$4 == "sdx" {print $3}' </proc/partitions) - 1024))

-1024 শেষে কারণ কি?
হাশিম

1
@ হাশিম প্রশ্নটি সর্বশেষ 1 এমবি মোছার পদ্ধতিটি জিজ্ঞাসা করে। শেষ 1MB শেষ হওয়ার আগে 1024kB শুরু করে।
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

3

ড্রাইভের শেষে যাওয়ার চেষ্টাটি খুব ভালভাবে কাজ করে, যেমন:

সন্ধান = $ (( blockdev --getsz /dev/sda2048))

যাইহোক, আপনি যখন এটি ব্যবহার করবেন, আমি আপনাকে প্রস্তাব দিচ্ছি যে আপনি হয় তা জেনে থাকুন যে আপনার গণনা মানটি সঠিক, বা এটি একেবারেই ব্যবহার করবেন না। আমি এটি বলার কারণটি হ'ল ড্রাইভগুলিতে হয় 512 বাইট সেক্টর বা 4 কে সেক্টর থাকতে পারে এবং আপনি যদি এই সমাধানটি 4k সেক্টরযুক্ত একটি ড্রাইভের সাথে ব্যবহার করেন তবে আপনি সেই গণনা মান সহ ড্রাইভের শেষে যাবেন না, এবং শেষে RAID তথ্য মিস করতে পারে (আমি এটিতে চলে এসেছি)।


আপনি ঠিক কীভাবে ছুটে এসেছেন তা কোনওভাবে ভাগ করতে পারেন? আমি কৌতূহল বোধ করছি, যদি আমি ভুল বুঝেছি যে ddকাস্টম bsমানগুলি ছোট / বড় ব্যবহারের ক্ষেত্রে সেক্টরগুলিকে কীভাবে অ্যাড্রেস করা হয় তবে ডিভাইসের ফার্মওয়্যার বা লিনাক্স কার্নেল দ্বারা রিপোর্ট করা প্রকৃত ব্লকসাইজ।
sjas

2

আপনি ডিস্কের সাথে সেক্টরের সংখ্যা পেতে পারেন hdparm -v /dev/sdx । 2048 (512 বাইট সেক্টর ধরে) - নাম্বার_সেক্টর সন্ধান করার চেষ্টা করুন।


এইচডিপর্মটি খুব সহজ বলে মনে হচ্ছে, তবে আমি কীভাবে খাতটির আকার পরীক্ষা করব?
পিটার.ও

1
/sys/block/sdx/queue/physical_block_sizeআপনাকে তথ্য দিতে পারে তবে কিছু নতুন ডিস্কগুলি তাদের রিপোর্ট করা খাত আকারের সাথে দ্রুত এবং আলগা খেলায়। ডিস্কের লেবেলটি পড়া বা নির্মাতাদের ডেটা শীটে এটি সন্ধান করা ভাল।

1
ধন্যবাদ .. আমি সবেমাত্র লক্ষ্য করেছি যে hdparm -I /dev/sdaখাত আকারের 2 "সংস্করণ" তালিকাভুক্ত করেছে: Logicalএবং Physical। "দ্রুত এবং আলগা" বলতে কী বোঝাতে চাইছেন এটি? .... আমি "অনুভূতি" পেয়েছি যে যদি কোনও কিছু যদি এমনভাবে আচরণ করে তবে এটি একটি রেড সিস্টেম হতে পারে ..
পিটার.ও

1
@ রেড: আমি এখন রেফারেন্সটি প্রকাশ করতে পারি না তবে আমি কোথাও পড়েছি যে 4096 বাইট সেক্টর সহ কয়েকটি ড্রাইভ সিস্টেমে রিপোর্ট করবে যে তারা 512 বাইট এবং তারপরে অভ্যন্তরীণভাবে রূপান্তরটি ডিল করবে।

1

তুমি ব্যবহার করতে পার dd মাধ্যমে ডিভাইসের আকারটি এবং পেতেfdisk :

dd if=/dev/zero of=/dev/sda bs=1k \
   seek=$(( (`fdisk -l /dev/sda | grep 'Disk /' | cut -d' ' -f 5` -1024*1024)/1024  )) count=1024

রাউন্ডিং ত্রুটিগুলি এড়াতে আমি 1m ব্লকসাইজ ব্যবহার করছি না।

বিকল্পভাবে, আপনি একটি ছোট সি-প্রোগ্রাম (বা স্ক্রিপ্ট) লিখতে পারেন যা lseekফাংশনটির সাথে SEEK_ENDঅনুরোধ করে এবং 1 এমবি এর নেতিবাচক অফসেট এবং তারপরে কল করে write

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