ZFS创建raidz1(RAID5)

原创
01/17 17:40
阅读数 1K

一、VDEVs简介

首先,我们需要了解虚拟设备或VDEV的概念。如果你已经熟悉RAID,那么这个概念对你来说并不陌生,尽管你可能没有将其称为“VDEVs”。基本上,我们有一个代表一个或多个物理设备的元设备。在Linux软件RAID中,您可能有一个“/dev/md0”设备,它代表一个包含4个盘的RAID-5阵列。在这种情况下,“/dev/md0”将是您的“VDEV”。

ZFS中有七种类型的VDEV:

    disk(default)   -   系统中的物理硬盘驱动器。
    file                 -   预分配文件/镜像的绝对路径。
    mirror            -   标准软件RAID-1镜像。
    raidz1/2/3      -   非标准分布式基于奇偶校验的软件RAID级别。

    备用硬盘标记为ZFS软件RAID的“热备件”
    cache             -   用于2级自适应读缓存(L2ARC)的设备。
    log                 -  一个单独的日志(SLOG),称为“ZFS Intent Log”或ZIL。

值得注意的是,VDEV始终是动态条带化的。但是,假设ZFS条带中有4个盘,条带大小由盘数量和阵列中盘的大小计算得出。如果添加了更多盘,则可以根据需要调整其他盘的条带大小。

二、zfs池

2.1 创建raidz1池

# zpool create storage raidz1 sda sdb sdc

RAIDZ-1类似于RAID-5,因为在阵列中的所有盘上都有一个奇偶校验位。 条带宽度是可变的,可以覆盖阵列中盘的精确宽度,更少的盘或更多的盘。 RAIDZ-1只允许一个盘故障来维护数据,两次盘故障会导致数据丢失。RAIDZ-1中至少应使用3个盘,存储容量将是阵列中盘的数量乘以最小盘的存储量,减去一个用于奇偶校验存储的盘。

2.2 查看pool信息

# zpool list
NAME      SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
storage  8.12T  2.48M  8.12T         -     0%     0%  1.00x  ONLINE  -

# zpool status storage
  pool: storage
 state: ONLINE
  scan: none requested
config:
 
    NAME        STATE     READ WRITE CKSUM
    storage     ONLINE       0     0     0
      raidz1-0  ONLINE       0     0     0
        sda     ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
 
errors: No known data errors

三、文件系统

3.1 创建adfs

# zfs create storage/adfs

3.2 查看adfs相关信息

# zfs get all storage/adfs
NAME          PROPERTY              VALUE                  SOURCE
storage/adfs  type                  filesystem             -
storage/adfs  creation              Mon May  6 14:27 2019  -
storage/adfs  used                  128K                   -
storage/adfs  available             5.24T                  -
storage/adfs  referenced            128K                   -
storage/adfs  compressratio         1.00x                  -
storage/adfs  mounted               no                     -
storage/adfs  quota                 none                   default
storage/adfs  reservation           none                   default
storage/adfs  recordsize            128K                   default
storage/adfs  mountpoint            /storage/adfs          default
storage/adfs  sharenfs              off                    default
storage/adfs  checksum              on                     default
storage/adfs  compression           off                    default
storage/adfs  atime                 on                     default
storage/adfs  devices               on                     default
storage/adfs  exec                  on                     default
storage/adfs  setuid                on                     default
storage/adfs  readonly              off                    default
storage/adfs  zoned                 off                    default
storage/adfs  snapdir               hidden                 default
storage/adfs  aclinherit            restricted             default
storage/adfs  createtxg             3453                   -
storage/adfs  canmount              on                     default
storage/adfs  xattr                 on                     default
storage/adfs  copies                1                      default
storage/adfs  version               5                      -
storage/adfs  utf8only              off                    -
storage/adfs  normalization         none                   -
storage/adfs  casesensitivity       sensitive              -
storage/adfs  vscan                 off                    default
storage/adfs  nbmand                off                    default
storage/adfs  sharesmb              off                    default
storage/adfs  refquota              none                   default
storage/adfs  refreservation        none                   default
storage/adfs  guid                  17063632217463997049   -
storage/adfs  primarycache          all                    default
storage/adfs  secondarycache        all                    default
storage/adfs  usedbysnapshots       0B                     -
storage/adfs  usedbydataset         128K                   -
storage/adfs  usedbychildren        0B                     -
storage/adfs  usedbyrefreservation  0B                     -
storage/adfs  logbias               latency                default
storage/adfs  dedup                 off                    default
storage/adfs  mlslabel              none                   default
storage/adfs  sync                  standard               default
storage/adfs  dnodesize             legacy                 default
storage/adfs  refcompressratio      1.00x                  -
storage/adfs  written               128K                   -
storage/adfs  logicalused           40K                    -
storage/adfs  logicalreferenced     40K                    -
storage/adfs  volmode               default                default
storage/adfs  filesystem_limit      none                   default
storage/adfs  snapshot_limit        none                   default
storage/adfs  filesystem_count      none                   default
storage/adfs  snapshot_count        none                   default
storage/adfs  snapdev               hidden                 default
storage/adfs  acltype               off                    default
storage/adfs  context               none                   default
storage/adfs  fscontext             none                   default
storage/adfs  defcontext            none                   default
storage/adfs  rootcontext           none                   default
storage/adfs  relatime              off                    default
storage/adfs  redundant_metadata    all                    default
storage/adfs  overlay               off                    default

3.3 修改属性,关闭文件系统的访问时间修改

# zfs set atime=off storage/adfs
 
# zfs get atime storage/adfs
NAME          PROPERTY  VALUE  SOURCE
storage/adfs  atime     off    local

四、清除ZFS的元数据

将zfs池中的物理硬盘从池中移除或用新盘替换后的, 旧盘上遗留zfs许多标头信息/元数据;旧盘重建新池时有出现报警。

  • /dev/sdb1 is part of potentially active pool 'storage'
  • /dev/sdb contains a corrupt primary EFI label.
  • status: The pool was last accessed by another system.
  • status: One or more devices contains corrupted data.
  • action: The pool cannot be imported due to damaged devices or data.

尽管ZFS提供了一种方法(zpool labelclear)来删除此信息,但是仅当硬盘仍连接到服务器时,它才起作用。 如果缺少硬盘,则您无能为力。 例如,以下命令将失败:

# zpool labelclear -f ada3

由于zfs将标头信息存储在硬盘的第一个和最后一个扇区中,所以要做的就是清除第一个和最后一个扇区。

linux系统

dd if=/dev/zero of=/dev/sdXX bs=512 count=10
dd if=/dev/zero of=/dev/sdXX bs=512 seek=$(( $(blockdev --getsz /dev/sdXX) - 4096 )) count=1M

FreeBSD系统

dd if=/dev/zero of=/dev/da1 bs=512k count=1

查找最后一个扇区

diskinfo -c /dev/da1

/dev/da1
        512             # sectorsize
        1500301910016   # mediasize in bytes (1.4T)
        2930277168      # mediasize in sectors
        0               # stripesize
        0               # stripeoffset
        2907021         # Cylinders according to firmware.
        16              # Heads according to firmware.
        63              # Sectors according to firmware.
        S1Y6J1KS710613  # Disk ident.

在示例中,扇区总数为2930277168(扇区中的介质大小)。

# dd if=/dev/zero of=/dev/da1 oseek=293027000

参考:

1. https://pthree.org/2012/04/17/install-zfs-on-debian-gnulinux/

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部