ডিস্ক শূন্য করার সময় কীভাবে লেখার ত্রুটি উপেক্ষা করবেন?


19

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

AFAICS, প্লেইন ddকেবল পঠন ত্রুটি উপেক্ষা করার জন্য একটি বিকল্প সরবরাহ করে। এইভাবে, কিছু

dd if=/dev/zero of=/dev/disk/by-id/lousy-vendor-123 bs=128k

যথেষ্ট না.

ddrescue ত্রুটিগুলি উপেক্ষা করার ক্ষেত্রে আরও ভাল বলে মনে হচ্ছে - তবে এর সাথে সর্বোত্তম কমান্ড লাইনটি কী হবে?

জিএনইউ ড্রেসস্কুতে আমার চেষ্টা:

ddrescue --verbose --force --no-split /dev/zero /dev/disk/by-id/lousy-vendor-123

1
dd conv=noerrorজিএনইউ এক্সটেনশন হতে পারে, আমি নিশ্চিত নই। যে কোনও ক্ষেত্রে, এটি কৌশলটি করা উচিত। যদিও সাটা-এর-ড্রাইভ-থেকে-মুছে ফেলতে দেওয়া উত্তরটি পুরো ড্রাইভগুলি মুছে ফেলার জন্য সন্ধানযোগ্য।
পিটার কর্ডেস

1
জিপিইউ ddডকুমেন্টের ম্যান পেজ @ পিটারকর্ডস noerror'পড়ার ত্রুটির পরেও চালিয়ে যান' ...
ম্যাক্সচলেপজিগ

1
dd conv=noerrorist
পসিক্স

2
dd conv=noerrorত্রুটিগুলি লেখার জন্য নয় (ম্যানপেজ অনুযায়ী) পড়তে হবে। এটির সাথে একত্রিত করার ক্ষেত্রে খারাপ কিছুই নেই conv=notrunc, যা আমার জন্য লেখার ত্রুটিগুলি উপেক্ষা করার কৌশলটি করেছিল। unix.stackexchange.com/a/229379/4319
imz - ইভান জ্যাকারিয়াশেভ

এইচডিডি তে সাধারণ লিখন অপারেশন যেমন ব্যবহার করা dd if=/dev/zero of=/dev/sdXকোনও ডিস্ক রিড সম্পাদন করে না। আপনি কেন ডিডি কমান্ড "যথেষ্ট নয়" বলে মনে করেন ? আপনি কোন "ত্রুটি" ভোগ করছেন?
করাত

উত্তর:


12

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

# badblocks -v -b 4096 -t random -o badblocks.txt -w /dev/destroyme
Checking for bad blocks in read-write mode
From block 0 to 2097151
Testing with random pattern: done
Reading and comparing: done
Pass completed, 52105 bad blocks found. (0/52105/0 errors)

এবং ব্লক তালিকা:

# head badblocks.txt
2097000
2097001
2097002
2097003
2097004

এবং এরপরে ডিস্কে কী রয়েছে:

# hexdump -C /dev/destroyme
00000000  be e9 2e a5 87 1d 9e 61  e5 3c 98 7e b6 96 c6 ed  |.......a.<.~....|
00000010  2c fe db 06 bf 10 d0 c3  52 52 b8 a1 55 62 6c 13  |,.......RR..Ubl.|
00000020  4b 9a b8 d3 b7 57 34 9c  93 cc 1a 49 62 e0 36 8e  |K....W4....Ib.6.|

নোট করুন এটি সত্যই এলোমেলো ডেটা নয় - প্যাটার্নটি পুনরাবৃত্তিযোগ্য, তাই আপনি যদি এড়িয়ে যান তবে আপনি 1MiBআবার একই আউটপুট দেখতে পাবেন।

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

অবশ্যই একটি খারাপভাবে ভাঙা ডিস্কের সাথে এটি খুব বেশি সময় নিতে পারে: এমন কোনও কোড নেই যা এটি সম্পূর্ণরূপে ত্রুটিযুক্ত অঞ্চলগুলি এড়িয়ে যেতে পারে। আপনি যে একমাত্র badblocksউপায়টি অর্জন করতে পেরেছেন তা আরও অনেক বড় ব্লকসাইজ ব্যবহার করা হবে।

আমি নিশ্চিত না যে এটি ddrescueআরও ভাল করে কিনা ; এটি অন্য দিকে এটি করার কথা (যত তাড়াতাড়ি সম্ভব ডেটা পুনরুদ্ধার করুন)। আপনি প্রথম / শেষ ব্লকটি নির্দিষ্ট করে ডিডি / ডিড্রেসকিউ / ব্যাডব্লকগুলির জন্য এটি ম্যানুয়ালি করতে পারেন ...


1
আমি যদি ব্যবহার করি -t randomবা -t 0- ব্যাডব্লক করে তবে কি কেবল একটি লেখার পাস? ম্যান পৃষ্ঠাটি দেখে - দেখে মনে হচ্ছে এটি ছাড়াই -t4 টি পাস হয় ('0xaa, 0x55, 0xff, 0x00' এর জন্য)।
ম্যাক্সচলেপজিগ

2
-tআপনি কমান্ড লাইনে প্রদত্ত প্রত্যেকটির জন্য এটি একটি পাস করে । আপনার কথায় ডিফল্টটি 4 পাস হয়।
frostschutz

13

যদি ডিস্কটি ইউএসবি দ্বারা সংযুক্ত না থাকে , তবে ডিস্কের এটিএ সুরক্ষিত মুছেhdparm ফেলার জন্য (সংস্করণ> 9.31) ব্যবহার বিবেচনা করুন । এই কমান্ডটি ড্রাইভের ফার্মওয়্যারটিকে খারাপ ব্লক সহ ডিস্কের সামগ্রীগুলি মুছতে বাধ্য করে।

সতর্কতা: সঠিক ড্রাইভ লেটারটি ব্যবহার করুন - আমি /dev/sdXউদাহরণ হিসাবে দেখিয়েছি - কেবল অনুলিপি / পেস্ট করবেন না।

প্রথমে এটিটি কমান্ডগুলি বোঝে কিনা তা পরীক্ষা করে দেখুন (বেশিরভাগ ড্রাইভগুলি যা এই গত দশকে নির্মিত বা আরও বেশি হওয়া উচিত):

$ sudo hdparm -I /dev/sdX
.
# lots of other info here...
.
Security: 
    Master password revision code = 65534
        supported
    not enabled
    not locked
    not frozen
    not expired: security count
        supported: enhanced erase
    202min for SECURITY ERASE UNIT. 202min for ENHANCED SECURITY ERASE UNIT.

নিষ্কাশনের শেষ দুটি লাইন দেখায় যে এটি সমর্থিত।

সুতরাং ড্রাইভে একটি পাসওয়ার্ড যুক্ত করুন (স্পষ্টতই একটি প্রয়োজন):

$sudo hdparm --user-master u --security-set-pass p /dev/sdX
security_password="p"

এবং মুছুন:

$sudo hdparm --user-master u --security-erase p /dev/sdX
security_password="p"

/dev/sdX:
Issuing SECURITY_ERASE command, password="p", user=user

এই পদ্ধতি সম্পর্কে আরও তথ্য এখানে উপলব্ধ ।


আপনি যদি ভাগ্যবান হন তবে এটি ইউএসবিতে কাজ করতে পারে এবং আপনার ইউএসবি <-> সাটা ব্রিজটি নন-স্ট্যান্ডার্ড এসটিএ কমান্ডের মধ্য দিয়ে যেতে পারে (এবং লিনাক্স ড্রাইভার + এইচডিপিআর সেই মডেলটিতে কীভাবে তা করতে পারে তা জানেন)। এছাড়াও, উদাহরণ লেখার জন্য, /dev/sdXভাল, কারণ যদি কেউ আটকানো এবং কাস্টমাইজ করার সময় এর কোনও ঘটনা মিস করে তবে সমস্যা হবে না।
পিটার কর্ডেস

@ পিটার কর্ডস - আপনার 24 ডিস্ক না থাকলে ... না, আমাকে বোকা! ধন্যবাদ, আমি এটিকে এসডিএক্সে পরিবর্তন করেছি, যা আমাকে উত্তরের দিকে ছুটে যেতে শেখাবে!
গ্যারেথ TheRed

2
লিঙ্কযুক্ত পৃষ্ঠাটিতে এই পদ্ধতিটির সাথে অনেকগুলি হার্ডওয়ার / ফার্মওয়্যার সম্পর্কিত
ক্যাভ্যাটকে তালিকাবদ্ধ করা হয়েছে

এটি প্রকৃতপক্ষে বেশ কয়েকটি গুপ্তচর দেখায়! আমি কেবল এটিই বলতে পারি যে এটি আমার জন্য কোনও ঝামেলা ছাড়াই কাজ করেছিল।
গ্যারেথ TheRed

2

আমি এখানে চারটি কার্যক্ষম উত্তর দেখতে পাচ্ছি:

  1. hdparmপদ্ধতি পোস্ট করেছে garethTheRed যদি আপনি আপনার কম্পিউটারে সরাসরি সংযুক্ত আছেন সম্ভবত সবচেয়ে ভাল। স্পষ্টতই, যদিও আপনি এটি ইউএসবির মাধ্যমে সংযুক্ত করার চেষ্টা করেন, আপনি নিজের ড্রাইভটি ইট করতে পারেন। আপনি যদি কোনও ড্রাইভের জন্য এটি করছেন তবে আপনি নিষ্পত্তি করতে চলেছেন, তবে এটি ভাল জিনিস হতে পারে। তবে, আপনি সম্ভবত ছাড়ার আগে মুছা নিরাপদ করতে চান।

  2. ইম্জ দ্বারা প্রতিবেদন করা কৌশল - ইভান জ্যাকারিয়াশেভ কাজ করবে, তবে খুব ধীর হতে পারে। আমি আপনাকে পরামর্শ দেব যদি আপনি না চান যে তথ্যটি পুনরুদ্ধারযোগ্য হয়, /dev/urandomপরিবর্তে ব্যবহার করুন /dev/zero; যেমন,

    dd iflag=fullblock oflag=direct conv=noerror,notrunc if=/dev/urandom of=/dev/sdX
    
  3. আমি নিম্নলিখিত বিরুদ্ধে পরামর্শ চাই। একই কাজটি দ্রুত করার জন্য, ম্যাক্সচ্লেপজিগ (প্রশ্নে) দ্বারা প্রতিবেদন করা কৌশলটি ব্যবহার করুন:

    ddrescue --verbose --force --nosplit /dev/urandom /dev/sdX
    

    এটি ddকমান্ডের চেয়ে দ্রুত হবে তবে কমান্ডের চেয়ে দ্রুত নয় hdparm। নীচে দেখুন কেন আমি এটি সুপারিশ করি না ...

  4. badblocksকমান্ড এছাড়াও কাজ, কিন্তু আপনি ডাটা যে ভাবে এলোমেলো যাবে না এবং এটি আবার খুব ধীর হতে হবে।

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

সুতরাং আপনি সাধারণ কিছু করতে পারেন:

dd if=/dev/sdX of=/dev/null conv=noerror

এবং, এরপরে, খারাপ ব্লকগুলি আবার লিখতে, ঠিক এমন কিছু:

dd if=/dev/zero of=/dev/sdX bs=128k

যদি এই কমান্ডটি কাজ করে, আপনি যদি সাহসী হন তবে আপনি নিজের ডিস্কটি পুনরায় ফর্ম্যাট করতে পারেন এবং এটি আবার ব্যবহার করতে পারেন।

বিকল্পভাবে, আপনি badblocksদুটি বার ডিস্কে কমান্ড চালাতে পারেন । দ্বিতীয়বার এটির কোনও খারাপ ব্লকের কথা বলা উচিত নয় ...

badblocks -v -s -w -t random /dev/sdX
badblocks -v -s -w -t random /dev/sdX

এটি বেশি সময় নিবে, তবে এটি আরও নির্ভরযোগ্য।

এটিও লক্ষণীয় যে hdparmকমান্ড ব্যতীত কোনও কৌশলই সত্যই কোনও সুরক্ষিত মুছে ফেলবে না । এই সব খারাপ ব্লক মনে আছে? এগুলির এখনও আপনার কিছু মূল তথ্য বেশিরভাগ অক্ষত। আপনার হার্ড ড্রাইভে আগে যা ছিল তার একটি অল্প পরিমাণ দেখতে একটি ডেটা রিকভারি বিশেষজ্ঞ এগুলি অ্যাক্সেস করতে পারে।

ডিড্রেসকিউ সম্পর্কিত এবং কেন আমি এর বিরুদ্ধে পরামর্শ দিচ্ছি, আমার নিম্নলিখিত প্রতিষেধক রয়েছে:

সমস্যাটি হ'ল ডিড্রেসেকর ত্রুটি উপেক্ষা করার ক্ষেত্রে খুব ভাল। আমার একটি হার্ড ড্রাইভ ছিল যা ধারাবাহিকভাবে ডিডি ড্রপ লেখার গতি প্রায় 102 গিগাবাইট চিহ্নের সাথে পড়ে এবং 238 গিগাবাইট চিহ্নে একটি লেখার ত্রুটি তৈরি করতে শুরু করে। আমি বেশ অভিভূত হয়েছি যে ডিড্রেসকিউ একটি অবিচ্ছিন্ন গতিতে ডিস্কের মাধ্যমে মন্থন অব্যাহত রেখেছিল, এমনকি কোনও ত্রুটিও প্রকাশ করে না। 17 ঘন্টা পরে, যখন 1300 জিবি ছিল আমি যখন ড্রাইভ লাইট নিজেই ঝলকানি বন্ধ লক্ষ্য করেছি notice একটি দ্রুত চেকের মাধ্যমে পুরো ইউএসবি এনক্লোজারটি অফলাইনে চলে গেছে revealed আমি ড্রাইভটি ক্র্যাডল থেকে টানতে লাগলাম। আমি লক্ষ্য করেছি যে ড্রেসস্কু খুব খুশিতে জানিয়েছিল যে এটি এখনও কোনও ত্রুটি ছাড়াই অনুলিপি করছে, এমনকি আমার হাতে থাকা ডিস্কটিও। আমি ডিস্কটিকে অন্য একটি মেশিনে প্লাগ করে দেখলাম এটি এখন একটি ইট।

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


1
'সুরক্ষিতভাবে মুছতে আপনাকে এলোমেলো ডেটা সহ একই ব্লকটি একাধিক বার ওভাররাইট করতে হবে।' - আপনি কি নিজের দাবিকে কোনও রেফারেন্স দিয়ে প্রমাণ করতে পারবেন (যেমন পিয়ার রিভিউ করা নিবন্ধ যা আধুনিক হার্ড ডিস্কগুলিতে জিরোড ডেটা পুনরুদ্ধার দেখায়)? এছাড়াও, হার্ডডিস্ক ফার্মওয়্যার একটি কালো বক্স। আপনি কীভাবে জানবেন যে এটিএ সুরক্ষিত মুছুন কমান্ড কেবলমাত্র প্রতিটি-সেক্টরকে শূন্য-প্যাটার্ন-রাইট হিসাবে প্রয়োগ করা হয়নি?
ম্যাক্সচলেপজিগ

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

1
dd conv=notrunc

সম্ভবত আমার জন্য কৌশলটি।

উল্লিখিত

dd conv=noerror

পড়ার ত্রুটির জন্য অবশ্যই থাকতে হবে (ম্যানপেজ অনুযায়ী)। দুজনের সংমিশ্রণে মন্দ কিছু নেই।

ডিস্কটি শূন্য করার জন্য আমার সম্পূর্ণ কমান্ডটি দেখতে পেয়েছিল:

dd iflag=fullblock oflag=direct conv=noerror,notrunc if=/dev/zero of=/dev/sda

একটি কাস্টম যুক্ত bs=করাও কিছু ক্ষেত্রে চাইবে।


1

একটি দ্রুত এবং পরিণত পদ্ধতি ব্যবহার করা হয় sdd

আপনি যদি কেবল সমস্ত সামগ্রী ধ্বংস করতে চান তবে কল করুন:

sdd -inull bs=1m of=/dev/rdsk/cXdXtXp0 -noerror

সর্বদা "কাঁচা" ডিস্ক ড্রাইভার ইন্টারফেস ব্যবহার করুন।

আপনি যদি কোনও ডিস্ক মেরামত করতে এবং যতটা সম্ভব পুরানো সামগ্রীটি রাখতে চান তবে কল করুন:

sdd if=/dev/rdsk/cXdXtXp0 of=/dev/rdsk/cXdXtXp0 bs=1m -noerror

এটি 512 বাইট স্তরে সমস্ত অপঠনযোগ্য ব্লককে জিরো দিয়ে প্রতিস্থাপন করবে। আপনি এর মাধ্যমে পুনরায় চেষ্টা গণনাটি পরিবর্তন করতে পছন্দ করতে পারেন try=#, ডিফল্টটি 2 হয়।

দ্রষ্টব্য যে ত্রুটিগুলির sddচেয়ে দ্রুততর ddকারণ এটি সরবরাহিত ব্লকসাইজটি পড়ার চেষ্টা করে এবং ত্রুটির ক্ষেত্রে এটি 512 বাইট সহ পড়ে। যদি পঠন ত্রুটিগুলি থাকে, এসডিডি এলোমেলোভাবে সিক্স তৈরি করে এবং ডামি ড্রাইভের ফার্মওয়্যারটি শান্ত করার জন্য পড়ে।

আমি দ্বিতীয় বৃহত্তম সান-মাইক্রোসিস্টেম ওএম এর জন্য কাজ করার সময় 1980 এর দশকে বর্ধিত ত্রুটি পুনরুদ্ধারের বৈশিষ্ট্যগুলি বিকাশ করা হয়েছে।

এসডিডি উত্সকোডটি চতুর সরঞ্জামগুলির মধ্যে অন্তর্ভুক্ত করা হয়েছে:

http://sourceforge.net/projects/schilytools/files/

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