লিনাক্স বিটিআরএফএস - ব্যর্থ ড্রাইভের সাথে একক রূপান্তর করুন


12

অল্প পরিমাণে ব্যাকস্টোরি:

আমার একটি ছোট মিডিয়া ফাইল সিস্টেম রয়েছে, যার উপরে আমি বিভিন্ন সিনেমা এবং টিভি শো সঞ্চয় করি যা আমার এইচটিপিসি সেটআপের জন্য ব্যবহৃত হয়। এটি প্রথমে btrfs1TB WD বহিরাগত ড্রাইভে ব্যবহার করে সেট আপ করা হয়েছিল ।

পরে, আমি এই ফাইল সিস্টেম RAID1 মিরর করার ক্ষমতা দেওয়ার জন্য, অন্য ড্রাইভ কেনার সিদ্ধান্ত নিয়েছি। এই ড্রাইভটি একটি সিগেট ব্যারাকুডা (2 টিবি, বারাকাকুদা 7200.14 পরিবার)। দুর্ভাগ্যক্রমে, এটি ড্রাইভের পক্ষে ভাল পছন্দ ছিল না। ড্রাইভটি শীঘ্রই বড় পরিমাণে পঠন ত্রুটিগুলি বিকাশ করা শুরু করেছিল, যদিও বিটিআরএফএস সেগুলি সংশোধন করতে সক্ষম হয়েছিল।

সম্প্রতি, এই ড্রাইভ থেকে পঠন ত্রুটির পরিমাণ বেড়েছে, এর অবস্থা ক্রমান্বয়ে আরও বাড়ছে। বিটিআরএফএস এখন ক্রাশ শুরু করছে:

kernel: RSP: 0018:ffff88005f0e7cc0  EFLAGS: 00010282
kernel: RIP: 0010:[<ffffffffa0081736>]  [<ffffffffa0081736>] btrfs_check_repairable+0xf6/0x100 [btrfs]
kernel: task: ffff88001b5c4740 ti: ffff88005f0e4000 task.ti: ffff88005f0e4000
kernel: Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
kernel: CPU: 1 PID: 3136 Comm: kworker/u8:3 Tainted: G           O    4.5.3-1-ARCH #1
kernel: invalid opcode: 0000 [#1] PREEMPT SMP 
kernel: kernel BUG at fs/btrfs/extent_io.c:2309!
kernel: ------------[ cut here ]------------
kernel: BTRFS info (device sdc1): csum failed ino 73072 extent 1531717287936 csum 3335082470 wanted 3200325796 mirror 0
kernel: ata3: EH complete
kernel: BTRFS error (device sdc1): bdev /dev/sda3 errs: wr 0, rd 18, flush 0, corrupt 0, gen 0
kernel: blk_update_request: I/O error, dev sda, sector 2991635296

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

আমি সচেতন যে কেউ নিম্নলিখিতটি চালাতে পারে:

sudo btrfs balance start -dconvert=single /media

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

এটি কাজ করে না:

$ sudo btrfs device delete /dev/sda3 /media
ERROR: error removing device '/dev/sda3': unable to go below two devices on raid1

আমি কি করব? সাহায্যের প্রশংসা করা হবে।

টিএল; ডিআর: বিটিআরএফএসে 1 ড্রাইভ দিয়ে শুরু singleহয়েছিল, আরেকটি ড্রাইভ যুক্ত করেছে, তৈরি করেছে RAID1, অন্যান্য ড্রাইভ এখন ত্রুটিযুক্ত হচ্ছে, আমি কীভাবে কেবল একটি ড্রাইভে (বিশেষত পরিচিত ভালটিকে) ফিরে যেতে পারি single?


আপডেট: চেষ্টা dconvert=singleকরে যাচ্ছি যে কেবলমাত্র আমি আশংকা করি এবং পরিচিত ভাল কপিটি মুছে ফেলে। :(
eeeita

উত্তর:


11

ঠিক আছে, আমি এই ট্রেলো লিঙ্কটির সাহায্যে এটি বের করেছি । যদি অন্য কেউ এটি করতে চায় তবে পদ্ধতিটি এখানে।

কার্যপ্রণালী

দুটি ডিস্কের একটি RAID1 অ্যারে থেকে, একটিটি /dev/sdaত্রুটিযুক্ত এবং অন্যটি /dev/sdcজ্ঞাত-ভাল:

  1. এই অ্যারের অক্ষম স্বয়ংক্রিয় মাউন্ট /etc/fstab, পুনরায় বুট । মূলত, আমরা চাই বিটিআরএফএসরা এই অ্যারেটি বিদ্যমান থাকতে ভুলে যেতে চাই, কারণ এটিতে একটি বাগ রয়েছে যেখানে এটি এখনও প্লাগযুক্ত না করা থাকলে একটি ড্রাইভ ব্যবহার করার চেষ্টা করবে।
  2. এখন আপনার অ্যারেটি আনমাউন্ট করা হয়েছে, কার্যকর করুন:

    echo 1 | sudo tee /sys/block/sda/device/delete

    sdaত্রুটিযুক্ত ডিভাইসের নামের সাথে প্রতিস্থাপন করা । এর ফলে ডিস্কটি ডাউন হয়ে যায় (আপনার এটি ডেমসগে যাচাই করা উচিত) এবং কার্নেলের কাছে প্রবেশযোগ্য নয় ible

    বিকল্পভাবে : বুট করার আগে কম্পিউটার থেকে ড্রাইভটি বের করে নিন! উপরেরটি আমার পক্ষে ঠিক কাজ করে বলে আমি এই পদ্ধতির পক্ষে না নেওয়ার বিষয়টি বেছে নিয়েছি।

  3. -o degradedমোড সহ আপনার অ্যারে মাউন্ট করুন।
  4. এর সাথে একটি পুনরায় ভারসাম্য ক্রিয়াকলাপ শুরু করুন sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint। এটি পরিচিত-ভাল ড্রাইভে এক্সটেন্টগুলি পুনরায় সংগঠিত করবে, এগুলিকে single(নন-রেড) এ রূপান্তর করবে । আপনার ড্রাইভের গতি এবং আপনার অ্যারের আকারের উপর নির্ভর করে এটি সম্পূর্ণ হতে প্রায় এক দিন সময় নেবে। (খনিতে ~ 700 জিবিবি ছিল, এবং প্রতি মিনিটে 1 1 গিগাবাইট অংশের তুলনায় ভারসাম্য রইল) ভাগ্যক্রমে, এই অপারেশনটি বিরতি দেওয়া যেতে পারে এবং এটি হওয়ার সময় অ্যারেটি অনলাইনে রাখবে।
  5. এটি হয়ে গেলে আপনি sudo btrfs device remove missing /mountpoint'অনুপস্থিত' ত্রুটিযুক্ত ডিভাইসটি সরিয়ে দিতে ইস্যু করতে পারেন।
  6. sudo btrfs balance start -mconvert=dup /mountpointমেটাডাটা রিডানডেন্সি পুনরুদ্ধার করতে দ্বিতীয় পুনরায় ভারসাম্য শুরু করুন । এটি আমার সিস্টেমে কয়েক মিনিট সময় নেয়।
  7. তুমি করেছ! আপনার অ্যারে এখন singleমোড, সমস্ত অপ্রয়োজনীয় অপসারণের সাথে।
  8. আপনার ত্রুটিযুক্ত ড্রাইভ বাইরে নিয়ে যান, এবং হাতুড়ি দিয়ে এটি বীট করুন।

সমস্যা সমাধান

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

2
এটি কাজ করে না। আমি উবুন্টু 16.04 এ আছি (কার্নেল ৪.৪) dmesg বলেছে "অনুপস্থিত ডিভাইস (1) সীমা ছাড়িয়েছে (0), লেখার যোগ্য মাউন্ট অনুমোদিত নয়"। এইভাবে আমি "মাউন্ট
অব

@ হেলোসম: সম্ভবত এটি বাগ is দেখুন bbs.archlinux.org/viewtopic.php?id=210541
জলটেক

ইতিমধ্যে লক্ষ্য প্রোফাইল রয়েছে (যা তাদের সবকটি হওয়া উচিত) খণ্ডগুলি এড়িয়ে ,softযাওয়ার জন্য প্রত্যেকের পরে যুক্ত করার বিষয়টি বিবেচনা convert=করুন।
টম হ্যালে

9

আপনার পোস্টের জন্য ধন্যবাদ। আমি এই ধারণাটি পেয়েছিলাম যে আমি অভিযানটি পরীক্ষা করতে পারি, আমার হটসপ উপসাগর থেকে ড্রাইভটি পপ করতে পারি, অন্য ড্রাইভ ব্যবহার করতে পারি এবং তারপরে রেড ড্রাইভটি আবার পপ করতে পারি ret

আমি যা পেয়েছি তা এখানে। মূল হিসাবে:

# sudo btrfs fi show
Label: 'disk'  uuid: 12817aeb-d303-4815-8bba-a3440e36c62c
Total devices 2 FS bytes used 803.10GiB
    devid    1 size 931.51GiB used 805.03GiB path /dev/sda1
    devid    2 size 931.51GiB used 805.03GiB path /dev/sdb1

প্রতিটি ড্রাইভের জন্য তালিকাভুক্ত ডিভিড নোট করুন। ব্রিট্রাফ ব্যালেন্সের জন্য মানুষ আমাকে বিভক্ত বিকল্পের দিকে নিয়ে যায়, ফিল্টারগুলি কীভাবে কাজ করে তা সনাক্ত করার জন্য কয়েকজন চেষ্টা করেছিল (প্রাথমিকভাবে ডিভিড = / দেব / এসডিবি 1 চেষ্টা করছে)। সুতরাং আপনার প্রথম প্রচেষ্টাটি এরকম কিছু দেখতে যাচ্ছে to

# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt

যা আমাকে একটি ত্রুটি দিয়েছে।

ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail    

এখানে dmesg থেকে ত্রুটি:

BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this

সুতরাং এটি চূড়ান্ত যে কাজ করেছে:

# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt

আশা করি এটি অন্য কাউকে সাহায্য করবে।


আপনি যদি কেবল একটি ড্রাইভকে অন্যটির সাথে প্রতিস্থাপন করতে চান তবে আপনি এটি ব্যবহার করে করতে পারেন btrfs replace
dma_k

এটি আমার জন্য এক বছর বা তার আগে কাজ করেছে, কিন্তু আজ তা করে না। আমি পরে কি টাইপ করি তা নয় devid=, ফলাফল একক ডেটা 1 ডিভাইসে রাখা হয়েছে
YtvwlD

-sconvertসিস্টেম খণ্ডগুলি রূপান্তর করতেও দেখুন out
টম হালে

ভারসাম্যের জন্য ম্যান পেজ হিসাবে |পরিবর্তে ব্যবহার করার কথা বিবেচনা করুন ,:profiles=<profiles> Balances only block groups with the given profiles. Parameters are a list of profile names separated by "|" (pipe)
টম হ্যালে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.