AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 496777
Accepted
Tom Hale
Tom Hale
Asked: 2019-01-26 15:16:14 +0800 CST2019-01-26 15:16:14 +0800 CST 2019-01-26 15:16:14 +0800 CST

RAID1 上的 btrfs 替换速度非常慢,存在故障磁盘

  • 772

我正在尝试替换 RAID1 btrfs 文件系统中的故障磁盘。

我仍然可以挂载分区rw(大约 5 分钟延迟和大量 I/O 内核错误之后)。

我开始replace尝试-r让故障磁盘不影响操作速度:

      -r
           only read from <srcdev> if no other zero-defect mirror exists.
           (enable this if your drive has lots of read errors, the access
           would be very slow)

不过,我的表现真的很差。分区为 3.6TiB,在 9.25 小时内我得到:

3.8% done, 0 write errs, 0 uncorr. read errs

按照这个速度,需要10多天才能完成!!!

由于我无法控制的情况,等待的时间太长了。

我经常看到有关故障磁盘的内核错误,平均每 5 分钟左右:

Jan 26 09:31:53 tara kernel: print_req_error: I/O error, dev sdc, sector 68044920
Jan 26 09:31:53 tara kernel: BTRFS warning (device dm-3): lost page write due to IO error on /dev/mapper/vg4TBd2-ark
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): bdev /dev/mapper/vg4TBd2-ark errs: wr 8396, rd 3024, flush 58, corrupt 0, gen 3
Jan 26 09:31:53 tara kernel: BTRFS error (device dm-3): error writing primary super block to device 2
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Sense Key : Medium Error [current]
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 Add. Sense: Unrecovered read error
Jan 26 09:32:32 tara kernel: sd 2:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 02 eb 9e 23 00 00 04 00
Jan 26 09:32:32 tara kernel: print_req_error: critical medium error, dev sdc, sector 391967000

我猜测错误是由于 btrfs 试图将会计数据写入磁盘(即使它完全空闲)。

即使是 mount ro, btrfs 也可能会尝试写入磁盘。挂载选项-onologreplay:

        Warning
           currently, the tree log is replayed even with a read-only
           mount! To disable that behaviour, mount also with nologreplay.

我怎样才能加快这个过程?

这篇文章说replace重启后会继续。

我在想:

  1. 取消当前replace
  2. 移除故障磁盘
  3. mount -o degraded,rw
    • 鉴于这种一次性安装选项的问题,希望没有停电)

在这个时间点,我建议同时:

  1. 允许replace在不存在故障磁盘的情况下继续(最近scrub显示好磁盘具有所有数据)
  2. 转换数据以single允许rw在过程中断电的情况下再次安装

这是一个replace提前完成的合理计划吗?

我的计算表明,考虑到磁盘 I/O 速度,6.5 小时(而不是 10 天)是可行的。

linux btrfs
  • 3 3 个回答
  • 1130 Views

3 个回答

  • Voted
  1. Best Answer
    Rucent88
    2022-09-22T07:04:34+08:002022-09-22T07:04:34+08:00

    如果您在故障驱动器上有重要数据,您想要的程序是ddrescue.

    首先,复制任何重要的东西

    如果文件系统上有任何数据您不能长时间没有,请先执行此操作。

    1. 断开故障驱动器。

    2. 将文件系统挂载为只读和降级。

      sudo mount -o degraded,ro /dev/sdX /mount/dir
      
    3. 将您需要的数据复制到另一个位置。

    然后ddrescue驱动

    现在要获取其余数据,我们使用ddrescue.

    1. 卸载 Btrfs 文件系统。不要安装它。不要将其安装为只读。

    2. 有一个格式化为 Ext4 或 Btrfs 的新驱动器,并禁用了写时复制。

    3. 运行 ddrescue 以创建从死驱动器到新驱动器的映像

      sudo ddrescue /dev/sdX /path/to/save.img /path/to/save.map
      
    4. Ddrescue 可能需要数小时甚至数天才能完成,具体取决于驱动器大小和速度。此外,如果驱动器故障太多,它可能永远不会完成。你允许它救援的时间取决于你。

    5. 当 ddrescue 完成处理后,移除/断开故障驱动器并且不要再次重新连接它。

    6. 将驱动器映像挂载到循环设备。

      sudo losetup -Pf --show /path/to/save.img
      
    7. 现在您应该能够使用正常的挂载命令挂载您的 Btrfs RAID 文件系统,而不是降级模式。它将自动使用循环映像设备代替丢失的驱动器。

    8. 安装 Btrfs 驱动器后,立即对其运行清理以修复 ddrescue 可能无法恢复的任何数据。

    从那里你有2个选择。您可以使用循环设备继续运行 Btrfs 文件系统,也可以将循环设备替换为另一个驱动器。

    • 1
  2. Tom Hale
    2019-01-26T23:58:02+08:002019-01-26T23:58:02+08:00

    这个答案提到了对故障磁盘的写入导致replace停止。

    它建议dmsetup在故障磁盘上设置一个 COW 设备,以便任何写入都成功。

    注意:在这种情况下,文件系统包含在dmcrypt设备中。如果不是这种情况,请参阅我关于“陷阱”和潜在数据丢失的评论。

    • 0
  3. Tom Hale
    2019-01-27T02:51:03+08:002019-01-27T02:51:03+08:00

    鉴于replace正在爬行,我做了以下事情:

    1. 确保降级的文件系统noauto在/etc/fstab
    2. 重新启动机器(由于 I/O 挂起大约需要 20 分钟)
    3. 在故障驱动器上禁用包含 btrfs fs 的 LVM VG:

      sudo vgchange -an <failed-vg>
      
    4. 禁用故障设备:

      echo 1 | sudo tee /sys/block/sdb/device/delete
      
    5. 挂载文件系统-o ro,degraded(degraded只能使用一次)

    6. 检查replace status并看到它被暂停:

      Started on 26.Jan 00:36:12, suspended on 26.Jan 10:13:30 at 4.1%, 0 write errs, 0 
      
    7. 安装-o remount,rw并看到replace继续:

      kernel: BTRFS info (device dm-5): continuing dev_replace from <missing disk> (devid 2) to target /dev/mapper/vg6TBd1-ark @4%
      

    在我写这篇文章的时候:

    • replace status每 30 秒左右显示 0.1% 的健康进展
    • iostat -d 1 -m <target-dev>显示大约 145MB/s(希捷宣传 160MB/s)

    更新:

    完成后,我注意到它btrfs device usage /mountpoint显示了一些Data,DUPand Metadata,single,而不仅仅是RAID1,所以我重新平衡了:

    btrfs balance start -dconvert=raid1,soft -mconvert=raid1,soft /mountpoint
    

    resize此外,如果两个设备现在都包含 slack ,请考虑ing:

    btrfs filesystem resize max /mountpoint
    

    我还建议您scrub,因为我有262016 个csum似乎与中断有关的可纠正错误replace。

    • 0

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve