มีวิธีการติดตามความคืบหน้าของการปรับสมดุล btrfs หรือไม่?


13

ฉันกำลังเปลี่ยนฮาร์ดไดรฟ์ที่ล้มเหลวใน btrfs ที่มิร์เรอร์

btrfs device delete missing /[mountpoint]ใช้เวลานานมากดังนั้นฉันจึงคิดว่าจริง ๆ แล้วมันคือการปรับสมดุลข้อมูลข้ามไดรฟ์สำรอง

มีวิธีการติดตามความคืบหน้าของการดำเนินการดังกล่าวหรือไม่?

ฉันไม่จำเป็นต้องคาดหวังว่า GUI ที่ดูดีหรือแม้แต่ตัวนับ% และฉันยินดีที่จะเขียนเชลล์สคริปต์สองบรรทัดหากจำเป็น แต่ฉันไม่รู้ด้วยซ้ำว่าจะเริ่มค้นหาข้อมูลที่เกี่ยวข้องได้ที่ไหน btrfs filesystem showเช่นเพิ่งแฮงค์คงรอให้การดำเนินการยอดคงเหลือเสร็จสิ้นก่อนที่จะแสดงข้อมูลใด ๆ เกี่ยวกับ f ที่ทำมิเรอร์

คำตอบ:


25
btrfs balance status /mountpoint

man 8 btrfs

 [filesystem] balance status [-v] <path>
        Show status of running or paused balance.

        Options

        -v   be verbose

4
ขอบคุณปรากฎว่าในกรณีของฉัน btrfs ไม่ปรากฏขึ้นเพื่อพิจารณาการดำเนินงานปัจจุบันยอดดุลตามที่ไม่ส่งคืน แต่ฉันเห็นว่ายังมี "แทนที่สถานะ" ซึ่งฉันอาจจะได้ใช้ถ้าฉันใช้คำสั่งแทนที่ . คำตอบที่ดีโดยไม่คำนึงถึง
user50849

Balance on '/volume1' is running 28 out of about 171 chunks balanced (1156 considered), 84% leftสถานะความสมดุลควรมองสิ่งที่ชอบ: เปอร์เซ็นต์ที่นับผิดปกติ
mwfearnley

7
sudo btrfs fi show

สิ่งนี้จะแสดงผลออกมาตามต้องการ:

Label: none  uuid: 2c97e7cd-06d4-4df0-b1bc-651397edf74c
        Total devices 16 FS bytes used 5.36TiB
        devid    1 size 931.51GiB used 770.48GiB path /dev/sdc
        devid    2 size 931.51GiB used 770.48GiB path /dev/sdg
        devid    3 size 931.51GiB used 770.48GiB path /dev/sdj
        devid    4 size 0.00 used 10.02GiB path
        devid    5 size 931.51GiB used 770.48GiB path /dev/sdh
        devid    6 size 931.51GiB used 770.48GiB path /dev/sdi
        devid    7 size 931.51GiB used 770.48GiB path /dev/sdd
        devid    8 size 931.51GiB used 770.48GiB path /dev/sdo
        devid    9 size 465.76GiB used 384.31GiB path /dev/sdn
        devid    10 size 931.51GiB used 770.48GiB path /dev/sdp
        devid    11 size 931.51GiB used 770.48GiB path /dev/sdr
        devid    12 size 931.51GiB used 770.48GiB path /dev/sdm
        devid    13 size 931.51GiB used 769.48GiB path /dev/sdq
        devid    14 size 931.51GiB used 770.48GiB path /dev/sdl
        devid    15 size 931.51GiB used 770.48GiB path /dev/sde
        devid    16 size 3.64TiB used 587.16GiB path /dev/sdf

Btrfs v3.12

และถ้าคุณสังเกตเห็นว่ารหัสอุปกรณ์ # 4 มีลักษณะแตกต่างจากที่เหลือเล็กน้อย เมื่อคุณทำ "อุปกรณ์ btrfs ลบหายไป / mntpoint" จากนั้นมันจะเริ่มงอกใหม่ meta / ข้อมูลการโจมตีที่จำเป็นในการเพิ่มไดรฟ์ที่ "หายไป"

ถ้าคุณทำสิ่งที่ชอบ

"watch -n 10 sudo btrfs fi show"

จากนั้นคุณจะเห็นพื้นที่บนอุปกรณ์ "หายไป" ที่มีขนาดเล็กลงเรื่อย ๆ เรื่อย ๆ เรื่อย ๆ จนเล็กลงจนการดำเนินการเสร็จสิ้นและมันจะถูกลบออกจากไฟ


4

BTRFS อาจใช้เวลาในการอ่านหรือจัดเรียงข้อมูลก่อนที่จะเขียนข้อมูลไปยังไดรฟ์ที่คุณคาดว่าจะเขียน

คุณสามารถดูเวลา CPU ที่ทุ่มเทให้กับการดำเนินการ BTRFS รวมถึงการปรับสมดุลเพิ่มลบแปลง ฯลฯ :

ps -ef | grep btrfs

ในการดูว่าแต่ละไดร์ฟยุ่งแค่ไหนให้ติดตั้ง sysstat แล้วรัน:

iostat

เพิ่มตัวเลือกบางอย่างเพื่อให้ iostat แสดงสถิติเป็นเมกะไบต์และอัปเดตทุก ๆ 30 วินาที:

iostat -m -d 30

เอาต์พุตตัวอย่างจากสครับดังนั้นไม่มีการเขียนในช่วงเวลานี้:

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda             700.30       170.10         0.00       6804          0
sdb               0.78         0.00         0.01          0          0
sdc             520.20       127.98         0.00       5119          0
sdd             405.72        92.02         0.00       3680          0
sde             630.05       153.66         0.00       6146          0
sdf             627.43       153.60         0.00       6144          0

ติดตั้งและเรียกใช้ munin เพื่อดูกราฟกิจกรรมการขับขี่และข้อมูลอื่น ๆ อีกมากมาย https://www.digitalocean.com/community/tutorials/how-to-install-the-munin-monitoring-tool-on-ubuntu-14-04


1

ฉันยังสงสัยด้วยว่าการลบที่ยาวนานจะสิ้นสุดลงดังนั้นฉันจึงได้โค้ดเชลล์ตัวน้อย:

get_bytes() {
  btrfs device usage --raw /mnt/data | egrep -- '-[0-9]+' | sed -E 's/[^0-9]+([0-9]+)/\1/'
}

prev=$(get_bytes)

while [ 1 ]; do
  current=$(get_bytes)
  diff=$((current-prev))
  if [ "$diff" -gt 0 ]; then
    dd if=/dev/zero iflag=count_bytes count="$diff" 2>/dev/null
  fi
  prev="$current"
  sleep 1
done | pv -petraW -s $(get_bytes) >/dev/null

นี่จะเป็นแถบความคืบหน้าที่ดีเช่นนี้:

0:13:54 [0,00 B/s] [16,0MiB/s] [>                             ]  1% ETA 19:23:19

แนวคิดทั่วไปคือการใช้pvเพื่อแสดงความคืบหน้า เนื่องจากคำสั่งที่เพียง แต่ช่วยให้กับจอภาพไบต์ที่ไหลผ่านท่อที่เราใช้ในการสร้างจำนวนที่เหมาะสมของศูนย์และพวกเขาเข้าไปในท่อddpv

ข้อดีของวิธีนี้คือคุณจะได้รับแถบความคืบหน้าที่ดี อย่างไรก็ตามเนื่องจากดูเหมือนว่าbtrfsจะลบข้อมูลหนึ่งครั้งในแต่ละครั้งจึงใช้เวลาสักครู่จนกว่าจะสามารถสังเกตเห็นความแตกต่างใหม่ในขนาดไบต์

เพื่อแก้ไขปัญหานี้การตั้งค่าสถานะ-aจะถูกเพิ่มไปที่ค่าเริ่มต้นของpvเพื่อให้แสดงอัตราการส่งข้อมูลเฉลี่ย (เนื่องจากอัตราการส่งสัญญาณปกติในปัจจุบันจะเป็น 0 ส่วนใหญ่)

ฉันรู้ว่านี่ไม่ใช่ทางออกที่ดีที่สุด แต่ดีที่สุดที่ฉันสามารถหาได้ หากมีคนมีความคิดในการปรับปรุงโปรดแจ้งให้เราทราบ! :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.