লিনাক্স - জিপিটি সহ একটি RAID1 অ্যারেতে খারাপ ব্লকগুলি মেরামত করা হচ্ছে


20

Tl; dr: আমি কীভাবে একটি RAID1 অ্যারে 1 ডিস্কে একটি খারাপ ব্লক স্থির করতে যাব?

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

এটি আমার পরিস্থিতি: আমার দ্বারা পরিচালিত একটি RAID1 অ্যারেটিতে দুটি 2 টিবি ডিস্ক (একই মডেল) রয়েছে mdadm। প্রায় 6 মাস আগে আমি স্মার্ট এটি রিপোর্ট করার সময় প্রথম খারাপ ব্লকটি লক্ষ্য করেছি। আজ আমি আরও লক্ষ্য করেছি, এবং এখন এটি সংশোধন করার চেষ্টা করছি।

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

  • একটি ডিস্কের পরিবর্তে, আমি একটি RAID1 অ্যারেতে দুটি ডিস্ক ব্যবহার করছি। একটি ডিস্ক ত্রুটি রিপোর্ট করছে অন্যটি ভাল আছে। হাওটো কেবল একটি ডিস্ক মাথায় রেখে লেখা হয়েছে, যা বিভিন্ন প্রশ্ন উত্থাপন করে যেমন 'আমি কি এই আদেশটি ডিস্ক ডিভাইস বা রেড ডিভাইসে ব্যবহার করি'?
  • আমি জিপিটি ব্যবহার করছি, যা fdisk সমর্থন করে না। আমি পরিবর্তে gdisk ব্যবহার করে আসছি, এবং আমি আশা করছি যে এটি আমাকে আমার প্রয়োজনীয় তথ্য দিচ্ছে

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

# smartctl -l selftest /dev/sda
smartctl 5.42 2011-10-20 r3458 [x86_64-linux-3.4.4-2-ARCH] (local build)
Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Short offline       Completed: read failure       90%     12169         3212761936

এটির সাহায্যে আমরা সংগ্রহ করি যে ত্রুটিটি এলবিএ 3212761936 এ রয়েছে the হাওটো অনুসরণ করে আমি ব্লক নম্বর নির্ধারণের জন্য পরবর্তী সেক্টরটি ব্যবহার করতে সন্ধান করতে জিডিস্ক ব্যবহার করি (যেহেতু এটি জিপিটি সমর্থন করে না আমি fdisk ব্যবহার করতে পারি না):

# gdisk -l /dev/sda
GPT fdisk (gdisk) version 0.8.5

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 3907029168 sectors, 1.8 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): CFB87C67-1993-4517-8301-76E16BBEA901
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 3907029134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      3907029134   1.8 TiB     FD00  Linux RAID

ব্যবহার করে tunefsআমি ব্লক আকারে খুঁজে পেতে পারি 4096। এই তথ্য এবং হাউটো থেকে গণনা ব্যবহার করে, আমি সিদ্ধান্তে পৌঁছেছি যে ব্লকটি প্রশ্নাবদ্ধ ((3212761936 - 2048) * 512) / 4096 = 401594986

হাওটো তখন আমাকে নির্দেশ দেয় debugfsযে ব্লকটি ব্যবহার হচ্ছে কিনা তা দেখার জন্য (আমি RAID ডিভাইসটি ব্যবহার করি কারণ এটির জন্য একটি এক্সটি ফাইল সিস্টেমের প্রয়োজন, এটি এমন একটি আদেশ ছিল যা আমাকে বিভ্রান্ত করেছিল যেহেতু আমি প্রথমে জানতাম আমার / ব্যবহার করা উচিত কিনা) দেব / এসডিএ বা / দেব / এমডি0):

# debugfs
debugfs 1.42.4 (12-June-2012)
debugfs:  open /dev/md0
debugfs:  testb 401594986
Block 401594986 not in use

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

# dd if=/dev/sda1 of=/dev/null bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000198887 s, 20.6 MB/s

যদি ব্লকটি পড়া না যায় তবে আমি এটি কাজ করে আশা করি না। তবে তা করে। আমি আবার বলছি ব্যবহার /dev/sda, /dev/sda1, /dev/sdb, /dev/sdb1, /dev/md0, এবং + -5 ব্লক নম্বরে প্রায় খারাপ ব্লক অনুসন্ধান ব্যবহার করুন। এটি সব কাজ করে। আমি আমার কাঁধটি টেনে নিয়ে গিয়ে এগিয়ে চলেছি এবং লেখার জন্য এবং সিঙ্ক করার জন্য প্রতিশ্রুতিবদ্ধ (আমি / dev / md0 ব্যবহার করি কারণ আমি এক ডিস্ককে সংশোধন করেছি এবং অন্যটি সমস্যার কারণ নাও পেতে পারে, এইভাবে উভয় ডিস্কই খারাপ ব্লকটি ওভাররাইট করে):

# dd if=/dev/zero of=/dev/md0 bs=4096 count=1 seek=401594986
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000142366 s, 28.8 MB/s
# sync 

আমি প্রত্যাশা করব যে খারাপ ব্লকে লেখার ফলে ডিস্কগুলি ব্লকটিকে একটি ভাল হিসাবে পুনঃস্থাপন করতে পারে, তবে অন্য একটি স্মার্ট পরীক্ষা চালানো অন্যভাবে দেখায়:

# 1  Short offline       Completed: read failure       90%     12170         3212761936

স্কয়ার 1 এ ফিরে যান। সুতরাং মূলত, আমি কীভাবে একটি RAID1 অ্যারে 1 ডিস্কে একটি খারাপ ব্লক ঠিক করব? আমি নিশ্চিত যে আমি কিছু সঠিকভাবে করিনি ...

আপনার সময় এবং ধৈর্য জন্য ধন্যবাদ।


সম্পাদনা 1:

একই এলবিএ খারাপ হিসাবে ফিরে আসার সাথে আমি একটি দীর্ঘ স্মার্ট পরীক্ষা চালানোর চেষ্টা করেছি (পার্থক্য কেবল এটিই 90% এর পরিবর্তে 30% বাকি রয়েছে):

SMART Self-test log structure revision number 1
Num  Test_Description    Status                  Remaining  LifeTime(hours)  LBA_of_first_error
# 1  Extended offline    Completed: read failure       30%     12180         3212761936
# 2  Short offline       Completed: read failure       90%     12170         3212761936

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

# badblocks -sv /dev/sda
Checking blocks 0 to 1953514583
Checking for bad blocks (read-only test): 1606380968ne, 3:57:08 elapsed. (0/0/0 errors)
1606380969ne, 3:57:39 elapsed. (1/0/0 errors)
1606380970ne, 3:58:11 elapsed. (2/0/0 errors)
1606380971ne, 3:58:43 elapsed. (3/0/0 errors)
done
Pass completed, 4 bad blocks found. (4/0/0 errors)
# debugfs
debugfs 1.42.4 (12-June-2012)
debugfs:  open /dev/md0
debugfs:  testb 1606380968
Illegal block number passed to ext2fs_test_block_bitmap #1606380968 for block bitmap for /dev/md0
Block 1606380968 not in use

এখান থেকে যেতে যেখানে নিশ্চিত নন। badblocksঅবশ্যই কিছু পাওয়া গেছে, তবে আমি উপস্থাপিত তথ্যগুলির সাথে কী করব তা নিশ্চিত নই ...


সম্পাদনা 2

আরও কমান্ড এবং তথ্য।

আমি বোধহয় এটিকে মূলত অন্তর্ভুক্ত করতে ভুলে যাচ্ছি like এটি এর জন্য স্মার্ট মান /dev/sda। আমার কাছে 1 কারেন্ট_পেন্ডিং_সেক্টর এবং 0 টি অফলাইন_অনরক্ষণযোগ্য।

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
  1 Raw_Read_Error_Rate     0x002f   100   100   051    Pre-fail  Always       -       166
  2 Throughput_Performance  0x0026   055   055   000    Old_age   Always       -       18345
  3 Spin_Up_Time            0x0023   084   068   025    Pre-fail  Always       -       5078
  4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       75
  5 Reallocated_Sector_Ct   0x0033   252   252   010    Pre-fail  Always       -       0
  7 Seek_Error_Rate         0x002e   252   252   051    Old_age   Always       -       0
  8 Seek_Time_Performance   0x0024   252   252   015    Old_age   Offline      -       0
  9 Power_On_Hours          0x0032   100   100   000    Old_age   Always       -       12224
 10 Spin_Retry_Count        0x0032   252   252   051    Old_age   Always       -       0
 11 Calibration_Retry_Count 0x0032   252   252   000    Old_age   Always       -       0
 12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       75
181 Program_Fail_Cnt_Total  0x0022   100   100   000    Old_age   Always       -       1646911
191 G-Sense_Error_Rate      0x0022   100   100   000    Old_age   Always       -       12
192 Power-Off_Retract_Count 0x0022   252   252   000    Old_age   Always       -       0
194 Temperature_Celsius     0x0002   064   059   000    Old_age   Always       -       36 (Min/Max 22/41)
195 Hardware_ECC_Recovered  0x003a   100   100   000    Old_age   Always       -       0
196 Reallocated_Event_Count 0x0032   252   252   000    Old_age   Always       -       0
197 Current_Pending_Sector  0x0032   100   100   000    Old_age   Always       -       1
198 Offline_Uncorrectable   0x0030   252   100   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0036   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x002a   100   100   000    Old_age   Always       -       30
223 Load_Retry_Count        0x0032   252   252   000    Old_age   Always       -       0
225 Load_Cycle_Count        0x0032   100   100   000    Old_age   Always       -       77

# mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu May  5 06:30:21 2011
     Raid Level : raid1
     Array Size : 1953512383 (1863.01 GiB 2000.40 GB)
  Used Dev Size : 1953512383 (1863.01 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Tue Jul  3 22:15:51 2012
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

           Name : server:0  (local to host server)
           UUID : e7ebaefd:e05c9d6e:3b558391:9b131afb
         Events : 67889

    Number   Major   Minor   RaidDevice State
       2       8        1        0      active sync   /dev/sda1
       1       8       17        1      active sync   /dev/sdb1

উত্তরের একটি হিসাবে: মনে হবে আমি স্যুইচ করেছি seekএবং এর skipজন্য করেছি dd। আমি হাওটোর সাথে যা ব্যবহৃত তা হিসাবে সন্ধান করা হয়েছিল। এই কমান্ডটি ব্যবহার ddকরলে হ্যাং হয়ে যায়: # ডিডি যদি = / dev / sda1 of = / dev / নাল বিএস = 4096 কাউন্ট = 1 এড়িয়ে যান = 401594986

তার চারপাশের ব্লকগুলি (..84, ..85, ..87, ..88) ব্যবহার করা ঠিক ঠিক কাজ করে বলে মনে হচ্ছে এবং / dev / sdb1 ব্লকের সাথে ব্যবহার করা ঠিক জরিমানা পড়বে 401594986(যেমনটি ডিস্কটি স্মার্ট পরীক্ষায় উত্তীর্ণ হয়েছিল )। এখন, আমার কাছে প্রশ্নটি হ'ল: ব্লকগুলি পুনরায় নিয়োগ দেওয়ার জন্য এই অঞ্চলটি লেখার সময়, আমি কি ব্যবহার করব /dev/sda1বা করব /dev/md0? আমি সরাসরি একটি ডিস্কে লিখে অন্য ডিস্ক আপডেট না করে RAID অ্যারে নিয়ে কোনও সমস্যা সৃষ্টি করতে চাই না।

সম্পাদনা 3

ব্লকটিতে সরাসরি ফাইল সিস্টেমের ত্রুটি তৈরি করা। আমি একটি উত্তর চয়ন করেছি যা সমস্যার দ্রুত সমাধান করেছে:

# 1  Short offline       Completed without error       00%     14211         -
# 2  Extended offline    Completed: read failure       30%     12244         3212761936

যারা সাহায্য করেছেন তাদের সবাইকে ধন্যবাদ। =)


আপনি ব্লকটি পড়তে সক্ষম হয়েছিলেন, সুতরাং এটি ক্ষতিগ্রস্থ হয় না। অতএব, কোন পুনর্নির্দিষ্ট সেক্টর। আমি আপনার fs ব্লক গণনা পরীক্ষা করে দেখেছি এবং এটি বৈধ বলে মনে হচ্ছে। যখন আমি খারাপ ব্লক রিকোলোকেশন করি, তখন আমি জানতে পারি যে কখনও কখনও স্মার্ট শর্ট টেস্ট আপত্তিজনক ব্লকটি সঠিকভাবে রিপোর্ট করে না। এদিকে, আপনি দীর্ঘ অফলাইন পরীক্ষা চালাতে পারেন smartctl -t long /dev/sdaএবং দেখুন প্রথম ত্রুটির এলবিএ পরিবর্তন হয় কিনা।
জারি লামেনেন

1
/sbin/badblocks -sv /dev/sdaডিস্কটি পরীক্ষা করার চেষ্টা করুন ।
জিপ্পি

আমি উভয় পরামর্শই সম্পন্ন করেছি এবং সে অনুযায়ী পোস্টটি আপডেট করেছি। এখন ও আটকে. = /
blitzmann

স্মার্টক্টেল কি শূন্য-বিহীন কারেন্টপেন্ডিং_সেক্টর গণনা রিপোর্ট করে? অফলাইন_অনিরোধকটি কি শূন্য নয়?
মিগ্রোগরভেন

প্রশ্নের অ্যারে স্থিতি যোগ করুন:sudo mdadm -D /dev/md0
psusi

উত্তর:


20

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

আপনার কেবল মিরাদ স্ক্রাব করা উচিত আয়নাটি। এটি খারাপ ক্ষেত্রটি লক্ষ্য করবে এবং এটি স্বয়ংক্রিয়ভাবে পুনরায় লিখবে।

# echo 'check' > /sys/block/mdX/md/sync_action    # use 'repair' instead for older kernels

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

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


সিস্টেমের সমস্ত RAID ডিভাইসের জন্য স্ক্রিপ্ট

কিছুক্ষণ আগে, আমি এই স্ক্রিপ্টটি সিস্টেমের সমস্ত RAID ডিভাইসগুলি "মেরামত" করতে লিখেছিলাম। এটি পুরানো কার্নেল সংস্করণগুলির জন্য রচিত হয়েছিল যেখানে কেবল 'মেরামত' খারাপ ক্ষেত্রটি ঠিক করবে; এখন কেবল চেক করা যথেষ্ট (মেরামত এখনও নতুন কার্নেলগুলিতে ভাল কাজ করে, তবে এটি প্যারিটি পুনঃ-অনুলিপি / পুনর্নির্মাণ করে, যা আপনি যা চান তা সবসময় হয় না, বিশেষত ফ্ল্যাশ ড্রাইভে)

#!/bin/bash

save="$(tput sc)";
clear="$(tput rc)$(tput el)";
for sync in /sys/block/md*/md/sync_action; do
    md="$(echo "$sync" | cut -d/ -f4)"
    cmpl="/sys/block/$md/md/sync_completed"

    # check current state and get it repairing.
    read current < "$sync"
    case "$current" in
        idle)
            echo 'repair' > "$sync"
            true
            ;;
        repair)
            echo "WARNING: $md already repairing"
            ;;
        check)
            echo "WARNING: $md checking, aborting check and starting repair"
            echo 'idle' > "$sync"
            echo 'repair' > "$sync"
            ;;
        *)
            echo "ERROR: $md in unknown state $current. ABORT."
            exit 1
            ;;
    esac

    echo -n "Repair $md...$save" >&2
    read current < "$sync"
    while [ "$current" != "idle" ]; do
        read stat < "$cmpl"
        echo -n "$clear $stat" >&2
        sleep 1
        read current < "$sync"
    done
    echo "$clear done." >&2;
done

for dev in /dev/sd?; do
    echo "Starting offline data collection for $dev."
    smartctl -t offline "$dev"
done

আপনি যদি checkপরিবর্তে এটি করতে চান repair, তবে এটির (অনির্ধারিত) প্রথম ব্লকের কাজ করা উচিত:

    case "$current" in
        idle)
            echo 'check' > "$sync"
            true
            ;;
        repair|check)
            echo "NOTE: $md $current already in progress."
            ;;
        *)
            echo "ERROR: $md in unknown state $current. ABORT."
            exit 1
            ;;
    esac

এই জন্য আপনাকে ধন্যবাদ. অবশেষে সমাধান করার প্রত্যাশায় আমি সম্প্রতি এই সমস্যাটিতে ফিরে এসেছি। আমি / dev / md0 ব্লকে লিখেছিলাম এবং আমার কাছে ফাইল সিস্টেম সমস্যা আছে তবে কৃতজ্ঞতার সাথে কয়েক ঘন্টা সন্ত্রাসের পরে এবং পুনরুদ্ধারের শেলগুলিতে বুট করা সমস্ত কিছুই কোনও ডেটালস ছাড়াই মেরামত করা হয়েছিল। আমি প্রথমে আপনার পদ্ধতিটি চেষ্টা করব এবং আশা করি এটি আমার মুলতুবি থাকা খাত থেকে মুক্তি দেবে। =)
blitzmann

স্ক্রাবটি সম্পূর্ণ হয়ে গেলে আপনি কীভাবে বলতে পারেন? হবে cat /sys/block/mdX/md/sync_action'অলস' পড়া হলে?
জন ক্র্যাম

@ জনক্র্যাম হ্যাঁ, এবং আপনি এটির দ্বারা cat /proc/mdstatবা এটির স্ক্রিপ্ট করতে চাইলে আপনি স্ট্যাটাসটি দেখতে পারেন,/sys/…/sync_completed
ডারোবার্ট

5

আমি ঠিক একটি RAID1 অ্যারে নিয়ে একই সমস্যা পেয়েছি। খারাপ সেক্টরটি পার্টিশনের মধ্যে একটির শুরুতে ঠিক ছিল - / ডি / এসডিবি 2 এর সেক্টর 16। আমি উপরের নির্দেশাবলীটি অনুসরণ করেছি: যাচাইয়ের পরে যে লজিক্যাল ব্লক 2 ফাইল সিস্টেমের দ্বারা ব্যবহৃত হয়নি এবং ডিডি সন্ধান করতে এবং সঠিক উপায়ে এড়াতে সাবধানতা অবলম্বন করা এবং 1 ফাইল সিস্টেম ব্লকটি শূন্য করা:

# dd if=/dev/zero of=/dev/md0 bs=4096 count=1 seek=2

এটা কি করল? এটি খারাপ খাতকে ঠিক করে নি। এটি, আমি এখন জানি, কারণ / dev / md0 সরাসরি / dev / sdb2 এ ম্যাপ করে না, আপনাকে RAID ডেটা অফফেসের অ্যাকাউন্ট নিতে হবে! এই নীচে আরও। এটি কী করেছিল তা আমার ফাইল সিস্টেমে একটি ছোট কিন্তু সম্ভাব্য বিধ্বংসী টার্ড ছিল। এটি প্রমাণিত হয়েছে যে / dev / md0 এর যৌক্তিক ব্লকের 2 টিতে দরকারী ফাইল সিস্টেম মেটাডেটা রয়েছে এবং উভয় ডিস্কে ঠিক ছিল, যতক্ষণ না আমি / dev / md0 এ লিখে উভয় অনুলিপিগুলিতে ক্রেপ করি । ভাগ্যক্রমে, e2fsck -y / dev / md0 কোনও আপাত ডেটা ক্ষতি ছাড়াই সমস্যাটি নির্ধারণ করেছে (আউটপুটটির একটি উদ্বেগজনক পরিমাণ বানানোর পরে)। পাঠ শিখেছি: ডিবাগফস আইচেক যদি 'ব্লক পাওয়া যায় নি' বলে, এর অর্থ এই নয় যে সংশ্লিষ্ট খাতগুলি ব্যবহৃত হচ্ছে না।

অফসেটের ডেটাতে ফিরে যান: এমডিএডএম ব্যবহার করুন এটির মতো অফসেটটি খুঁজে পেতে:

# mdadm --examine /dev/sdb2
/dev/sdb2:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x0
     Array UUID : ef7934b9:24696df9:b89ff03e:b4e5a05b
           Name : XXXXXXXX
  Creation Time : Sat Sep  1 01:20:22 2012
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953241856 (931.38 GiB 1000.06 GB)
     Array Size : 976620736 (931.38 GiB 1000.06 GB)
  Used Dev Size : 1953241472 (931.38 GiB 1000.06 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
          State : clean
    Device UUID : f3b5d515:446d4225:c2191fa0:9a9847b8

    Update Time : Thu Sep  6 12:11:24 2012
       Checksum : abb47d8b - correct
         Events : 54


    Device Role : Active device 0
    Array State : AA ('A' == active, '.' == missing)

এই ক্ষেত্রে, ডেটা অফসেটটি 512 বাইটের 262144 সেক্টর। আপনি যদি / dev / md0 থেকে ডিডি করেন এবং 131072K এর অফসেটের সাথে কাঁচা পার্টিশনের ডেটাগুলির সাথে এটি তুলনা করেন তবে দেখতে পাবেন তারা মিলছে। সুতরাং আমার ক্ষেত্রে, / dev / sdb2 এর লজিকাল ব্লক 2 (সেক্টর 16--23) এমনকি ফাইল সিস্টেমে নেই; তারা RAID সুপারব্লকটিতে রয়েছে, যার সম্পর্কে আপনি এখানে পড়তে পারেন: https :// भय.wiki.kernel.org/index.php/RAID_super block_formats - সংস্করণ 1.2 এর জন্য, এটি অ্যারেতে প্রতি ডিভাইসে 256 বাইট + 2 বাইট সমন্বিত , সমস্ত 4096 বাইট ইন শুরু করে, তাই আমার ক্ষেত্রে, খারাপ খাতটি ব্যবহৃত হয়নি। সংশ্লিষ্ট বিভাগগুলি / dev / sdc2 (RAID1 অ্যারের অন্যান্য অর্ধেক) শূন্য হয় তাই আমি অনুভব করেছি যে এটি করা নিরাপদ হবে:

# dd if=/dev/zero of=/dev/sdb2 bs=4096 count=1 seek=2

এটা কাজ করেছে!


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

2

যদি ডেবিয়ান চালাচ্ছেন তবে আপনার সম্ভবত সম্ভবত /etc/cron.d/mdadm এ চাকরী রয়েছে। এটি /usr/share/mdadm/checkarray --cron --all --idle --quiet প্রতি মাসের প্রথম রবিবার চলবে । পুনর্লিখনটি ত্বরান্বিত করতে যখন আপনি সংশোধনযোগ্য হার্ডওয়ার ত্রুটিগুলি পান তখন ম্যানুয়ালি এটি চালান।


ঠিক আছে, ম্যানুয়ালি এটি চালানোর সময় আপনি সম্ভবত ছেড়ে যেতে চান --cron
ডার্বোবার্ট

1

আপনি আপনার ddযুক্তি মিশ্রিত করেছেন । seekনির্দিষ্ট মধ্যে অফসেট চাইতে এটা কারণ আউটপুট । আপনি ইনপুটskip ব্লক করতে চেয়েছিলেন ।


ধন্যবাদ! এ থেকে ডেটা অন্তর্ভুক্ত করতে আমি মূল পোস্টটি আপডেট করেছি। আপনি যদি আমাকে এখান থেকে ব্লকটি ঠিক করতে কিভাবে বলতে পারেন তবে আমি মনে করি আমি আপনাকে উত্তর দেব। (আমি সরাসরি লিখতে হবে /dev/sda1/বা /dev/md0ব্লক ওভাররাইট করতে ব্যবহার করা উচিত কিনা আমি অনিশ্চিত ) =)
ব্লিটজম্যান

@ রায়ান, এমডি ০ তে লেখার উপায় হওয়া উচিত, যদিও এসডিএ-তেও কাজ করা উচিত।
psusi

0

আপনার যদি একটি sw-raid1 থাকে এবং আপনি সরাসরি কোনও সদস্যের কাছে ডেটা লিখে থাকেন, আপনি অবিলম্বে একটি দুর্নীতিগ্রস্থ অভিযান পরিচালনা করবেন। কোনও এমডিএক্সের অংশ হলে কোনও এসডএক্স বা এসডিবিএক্সে ডেটা লিখবেন না। আপনি এমডিএক্স-এ লিখলে আপনার উভয় ড্রাইভে ডেটা অনুলিপি করা হবে, আপনি এমডিএক্স থেকে পড়লে আপনার একটি ড্রাইভ থেকে ডেটা পড়তে হবে ..

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