আমি কীভাবে একটি ফাইলে একটি বিট ফ্লিপ করতে পারি?


35

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

সমস্যাটি হ'ল নিবন্ধটি কীভাবে এটি করতে হয় তা ব্যাখ্যা করে না ।
আমি একটি ফাইল সিস্টেমের খুব নির্দিষ্ট অংশে একটি বিট পরিবর্তন সম্পর্কে কীভাবে যাব?

আমার এটিও উল্লেখ করা উচিত যে এটি অবশ্যই একটি অফলাইন ফাইল সিস্টেমে করা উচিত যাতে বিটিআরএফরা আমার লেখাকে উদ্দেশ্যমূলক হিসাবে দেখতে না পারে।

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


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

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

1
যদি বিটিআরএফস সঠিক আইওকটিএল সমর্থন করে (এটি নিশ্চিত কিনা তা নিশ্চিত নয়) তবে filefrag -vফাইলটি কোথায় রয়েছে তা ঠিক খুঁজে বের করতে আপনি ব্যবহার করতে পারেন ।
ডারোবার্ট

3
@ অলি আমার সন্দেহ হয় যে আপনি ভোটের ক্ষেত্রে এবং জবাবের দিক থেকে উভয়ই ইউএন্ডএল-তে আরও আগ্রহী শ্রোতাদের সন্ধান করবেন। প্লাস, এই
strugee

1
ঠিক ডান জায়গায় একটি মহাজাগতিক রশ্মি অঙ্কুর।
smcg

উত্তর:


20

আমি কোনও বিশেষজ্ঞ নই, তবে btrfs-progsপ্যাকেজটিতে আসলে এটি করার জন্য একটি সরঞ্জাম অন্তর্ভুক্ত রয়েছে, যদিও আপনাকে উত্স থেকে তৈরি করতে হতে পারে। যাইহোক, একবার ইনস্টল বা তৈরি হয়ে গেলে btrfs-progs, আপনি সেই সরঞ্জামটি ব্যবহার করতে সক্ষম হবেন btrfs-corrupt-block, যা বিআরটিএফ বিকাশকারীরা ফাইল সিস্টেমটি পরীক্ষা করার জন্য ব্যবহার করেন।

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


2
অসাধারণ সন্ধান! ধরে নিই যে btrfs-corrupt-blockএটি আসলে একটি খাঁটি পরীক্ষা বলে লেখা হয়েছে এবং বিটিআরএস বিকাশকারীদের "কৌশল" নয়, এটি বিলের ঠিক ঠিক মাপসই করা উচিত।
allquixotic

@allquixotic আপনি যদি বিটিআরএফস সম্পর্কে আরও জানতে চান তবে লিনাক্স.কনফ.উউ 2012 থেকে একটি দুর্দান্ত আলোচনা আছে । যেমনটি আমি বলেছিলাম, btrfs-corrupt-blockবিকাশকারীরা এটি ব্যবহার করেন, সুতরাং এটি কোনও কৌশল হলে এটি খুব কার্যকর হবে না :)
স্ট্রুজি

3
@allquixotic এটি ওপেন সোর্সের সৌন্দর্য: আপনি বিটিআরএফসের উত্স কোডটি দেখতে এবং এটি পরীক্ষা করতে পারেন! অবশ্যই, এটি একটি সহজ কাজ হবে না তবে আপনি যদি সত্যিই চান তবে আপনি এটি করতে পারেন
বাকুরিউ

@ বাকুরিউ আমি এ সম্পর্কে পুরোপুরি সচেতন। আমি কখনই গুরুতরভাবে সন্দেহ করি নি যে btrfs-corrupt-blockএটি নিখুঁত পরীক্ষা নয়, যেহেতু এটি উত্সতে কেউ কেউ পোচ দিয়ে খুব তাড়াতাড়ি খুঁজে পাওয়া যায় এবং ওরাকল (কমপক্ষে; পাশাপাশি অন্য কোনও বিটিআরএফ বিকাশকারী / অবদানকারী) এর বিরুদ্ধে নেতিবাচক জনসংযোগ হিসাবে ব্যবহার হয়। এটি কেবল অফ-দ্য কাফ মন্তব্য ছিল।
allquixotic

আমি অবাক হয়েছি যে ওপি (@ অলি) কোনও ব্লক (অর্থাৎ ফাইল সিস্টেম কাঠামো) বা কোনও ফাইলকে (যেমন, কোনও ফাইলের বিষয়বস্তু ??) দূষিত করতে চায় ... এবং আমি বিশ্বাস করি যে আত্ম-নিরাময়ের বিটিআরএফএস দাবিটি প্রায় প্রাক্তন, পরে না? [একটি ফাইল সিস্টেম কীভাবে জানবে যে কোনও বিট একটি ফাইলটিতে উল্টানো হয়েছিল? কিছুটা সিআরসি?]। এই উত্তরটি সম্ভবত ডানদিকে রয়েছে, তবে, +1। [তবে এটি "সিঙ্গল বিট" এর চেয়ে বেশি পরিবর্তন হতে পারে? বা এমন কোনও কিছু পরিবর্তন করুন যা "কোথাও" এলোমেলো কিছু হওয়ার চেয়ে আরও সহজে
নিরাময় করা যায়

16
  1. /dev/sda11 মিলিয়ন সেক্টরের অফসেটের অফসেট (কেবল উদাহরণ ) সহ ব্লক ডিভাইসে (যেমন ) একক সেক্টরের মান পান :

    sudo dd if=/dev/sda1 of=/root/mysector bs=512 count=1 skip=1M
    

    এই নির্বিচারে নির্বাচিত 1 এম * 512 বাইট অফসেটটি কেবল আপনি ফাইল সিস্টেমের মেটাডেটা অংশের বাইরে রয়েছেন এবং আসলে এমন একটি সেক্টরে যা ডেটা রয়েছে তা নিশ্চিত করার জন্য।

  2. একটি হেক্স সম্পাদক সম্পাদকের মাধ্যমে সামগ্রীটি পরিবর্তন করে কাঁচা সেক্টরের ডেটা সম্পাদনা করুন। উদাহরণস্বরূপ দেখুন লিনাক্সের জন্য একটি ভাল হেক্স সম্পাদক দরকার

  3. বিপরীত যুক্তি ifএবং ofযুক্তি সহ ড্রাইভটিতে সেক্টরটি পিছনে রাখুন :

    sudo dd if=/root/mysector of=/dev/sda1 bs=512 count=1 seek=1M
    

2
1 মিলিয়ন তম ব্লকটি আসলে কোনও ফাইলের অংশ না হলে এটি পরীক্ষা করতে সহায়তা করবে না। একটি নির্দিষ্ট ফাইলটি শুরু হওয়া কোন ব্লকটি সে কীভাবে সন্ধান করবে?
দারথ অ্যান্ড্রয়েড

3
এটা তাই কাছাকাছি এসেছি। আপনি যদি ফাইলটির সঠিক অবস্থানে ডিডি কমান্ডটি লক করতে পারেন তবে এটি সম্ভবত এটির কাছে যাওয়ার সেরা উপায়।
অলি

@ অলি হ্যাঁ, ফাইল-সিস্টেমের অতিরিক্ত পরিবারের জন্য এটি কীভাবে করতে হয় তা আমি জানি তবে বিটিআরএস-এর সাথে আমার তেমন অভিজ্ঞতা নেই। আমি কোনও উপায় খুঁজে পেতে পারি কিনা তা আমাকে দেখতে দিন।
জার্মটভিডিজক

2
@ অলি: আপনি ব্লক দ্বারা একটি লুপ, ডিডি আউটপুটিং ব্লক রাখতে পারেন (যেমন, উপরের মত, তবে "এড়িয়ে যান = এন", এন 1..max এ থাকা) যতক্ষণ না আপনি সম্পাদনা করতে চান ফাইলটি থেকে একটি লাইন গ্রিপ করতে না পারে [একটি লাইন তৈরি করার চেষ্টা করুন যা অন্য কোথাও ঘটে না ... উদাহরণস্বরূপ এটি একটি পাসওয়ার্ড জেনারেটর থেকে নেওয়া এবং যথেষ্ট দীর্ঘ?]। তারপরে আপনি সেই নির্দিষ্ট ব্লকটি সম্পাদনা করুন। পুনঃনির্মাণ, পরীক্ষাটি পরিবর্তনটি উল্টানো হয়েছে কিনা (যা আমি সন্দেহ করি, শীর্ষ উত্তরটিতে আমার মন্তব্য দেখুন ... ফাইল ডেটা (= সামগ্রী) এবং নিজেই ফাইল সিস্টেম কাঠামোর মধ্যে বিভ্রান্তি দেখা যাচ্ছে (= কীভাবে ফাইল এবং তাদের বিষয়বস্তু সংগঠিত )?)
অলিভিয়ার ডুলাক

16

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

আশীর্বাদে জেপিজি খোলার পরে, আমি জেপিইগির "মাংস" ভাল করে পেতে কয়েকবার পৃষ্ঠাটি হিট করেছি এবং তারপরে প্রায় পঞ্চাশ বাইট মূল্যবান ডেটা হাইলাইট করেছি এবং এটি অনুলিপি করে একটি পাঠ্য সম্পাদককে পোস্ট করেছি (আমার মধ্যে কেস, জিইডিট)। এটি আমাকে অনুসন্ধান করার জন্য কিছু দিয়েছে।

এখন আমি ভিএম-এর প্রতিটি অ্যারেতে জেপিজি সংরক্ষণ করেছি। অ্যারের পিছনে থাকা স্টোরেজটি .QCO2 ফাইলগুলির একটি সিরিজ ছিল। একবার আমি জেপিইজি অ্যারেগুলিতে সংরক্ষণ করি, তবে আমি প্রতিটি অ্যারের সাথে যুক্ত .QCO2 ফাইলগুলিকে আশীর্বাদে লোড করতে পারি এবং সেগুলি অনুসন্ধান করতে পারি - সেগুলি খুব বড় ছিল না, জেপিইজি এবং কিছু মেটাডেটা ছাড়া কিছুই ছিল না - সেই পঞ্চাশ বাইট প্যাটার্নের জন্য আমি জেপিইজি থেকে হাইলাইট এবং অনুলিপি করতাম। ভয়েলা, আমার ব্লক হয়ে গেছে দুর্নীতি! এই মুহুর্তে, আমি কেবল BP ব্যবহার করে ভিএম এর ভার্চুয়াল ডিস্কে সঞ্চিত জেপিজির পৃথক বাইটগুলি ম্যানুয়ালি সম্পাদনা করতে পারি - এবং, গুরুত্বপূর্ণভাবে, প্রতিটি অ্যারেতে ঠিক একইভাবে এটি করতে পারি ।

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

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

আশাকরি এটা সাহায্য করবে!


4

আপনি একটি ছোট প্রোগ্রাম চেষ্টা করতে পারেন যা খোলার ফাইলটিতে সঞ্চালন করবে ।FIBMAP ioctl(2)

দ্রুত ওয়েব অনুসন্ধানে, আমি এই ব্লগ পোস্টটি খুঁজে পেয়েছি http://smackerelofopinion.blogspot.tw/2009/06/fibmap-ioctl-file-s systemm- block- number.html কীভাবে এটি করা যায় তা বিশদ - এটি আপনাকে একটি লিঙ্কও দেবে একটি নমুনা প্রোগ্রাম যা আপনি নিজেকে সংকলন এবং চালাতে পারেন can

$ git clone git://kernel.ubuntu.com/cking/debug-code
$ cd debug-code/block-mapper-fibmap
$ make
$ sudo ./fibmap /path/to/your/image-file.jpg

ঠিক hdparm --fibmapএইভাবেই (@ ফ্যালকোনার দ্বারা উল্লিখিত) প্রয়োগ করা হয়েছে।

ব্লক নম্বরগুলি সন্ধানের পরে আপনি ddফাইলটি পরিবর্তন করতে গংফু নিয়োগ করতে পারেন , যেমন @gertvdijk স্কেচ করা। অথবা হতে পারে আপনি কেবলমাত্র fibmap.cআপনার জন্য বিট ফ্লিপ করার জন্য উপরের প্রোগ্রামটি সংশোধন করতে পারবেন , সরাসরি ফাইল সিস্টেমের স্তরটিকে বাইপাস করে ডিভাইস ফাইলে লিখতে (প্রোগ্রামটির জন্য তিনটি পরামিতি: ১. ফাইলটির পথ, ২. ফাইলযুক্ত ডিভাইস ফাইল সিস্টেম, ৩. অফসেট এবং বিটটি আপনি সংশোধন করতে চান)।

( অস্বীকৃতি: আমি FIBMAP ioctl(2)লুপব্যাক ডিভাইস বা বিটিআরএফএস ফাইল সিস্টেমের কোনও ফাইলের জন্য কাজ করবে কিনা তা পরীক্ষা করে দেখেছি এবং গ্যারান্টি দিতে পারি না , তবে আমি দৃ strongly়ভাবে এটির প্রত্যাশা করব। আমি অনুমান করছি যে ফাইলটিতে hdparmসঞ্চালনের আগে ডিভাইসের ধরণের পরীক্ষা করা হবে ioctl(2)এবং তাই ব্যর্থ।)


3
sudo hdparm --fibmap /PATH/TO/FILE

ফাইলটি যেখানে রয়েছে সেখানে আপনাকে এলবিএ দেবে। এর পরে আপনি @gertvdijk এর উত্তরটি ব্যবহার করতে পারেন।


দুর্ভাগ্যক্রমে এটি কাজ করে না বলে মনে হচ্ছে। এটি একটি 0,39: device not found in /devবিছিন্ন করছে এটি হয় এটি বিটিআরএফস (কারণ সম্ভবত এটি) লুপব্যাকযুক্ত ফাইলগুলিতে ব্যবহার করছি। আমি চেষ্টা করব এবং একটি "যথাযথ" ভিএম দিয়ে এটি করব।
অলি

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