`

ZFS Pool 里增加硬盘做镜像

阅读更多

 

ZFS 第一次出现在 OpenSolaris 上是在2005年11月发布的 build 27 版本,因为稳定性、可靠性等原因直到最近 VPSee 才有考虑把它用在生产环境里,现在 VPSee 所有的 Solaris 服务器还是在用很古老的 UFS,UFS 仍是 Solaris 10 的默认文件系统。昨天简单玩了一下 ZFS ,用6个文件模拟6个硬盘在 ZFS 上进行了一系列添加、删除、镜像的操作,立刻体会到了 ZFS 的强大,但这与实际操作物理硬盘还是有点差别。VPSee 当时安装 OpenSolaris 的时候只用了一块 250GB 的硬盘,现在可以增加一块 250GB 的硬盘做镜像,试验一下 ZFS 强大的 mirror,相当于做 RAID1.

检查 pool

要在服务器上增加一块实际硬盘,先要看看系统原来的 pool 有什么:

# zpool status
  pool: rpool
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c8t0d0s0  ONLINE       0     0     0

errors: No known data errors

上面显示 c8t0d0s0 是里面唯一的一块硬盘。现在插上一块新硬盘后(必要时需要重启)运行 format 工具:

# format
Searching for disks...

The device does not support mode page 3 or page 4,
or the reported geometry info is invalid.
WARNING: Disk geometry is based on capacity data.

The current rpm value 0 is invalid, adjusting it to 3600
done

c8t1d0: configured with capacity of 232.87GB

AVAILABLE DISK SELECTIONS:
       0. c8t0d0 
          /pci@0,0/pci108e,534c@5/disk@0,0
       1. c8t1d0 
          /pci@0,0/pci108e,534c@5/disk@1,0
Specify disk (enter its number):

按 “Ctrl + C” 退出。c8t0d0 是原来的硬盘,c8t1d0 是后来加上去的新硬盘。

分区和 label

现在用 -e 参数再次运行 format,然后选择 partition,创建一个 Solaris 分区后打印出分区表看看,只有 s0, s2, s8 有内容。完成分区后退到 format 菜单,接着选择 label,因为大多数的 PC BIOS 都不支持 EFI labels,所以要选择 SMI:

# format -e c8t1d0

format> partition
SELECT ONE OF THE FOLLOWING:
   1. Create a partition
...

partition> print
Current partition table (original):
Total disk cylinders available: 30398 + 2 (reserved cylinders)

Part      Tag    Flag     Cylinders         Size            Blocks
  0       root    wm       1 - 30396      232.85GB    (30396/0/0) 488311740
  1 unassigned    wu       0                0         (0/0/0)             0
  2     backup    wu       0 - 30396      232.85GB    (30397/0/0) 488327805
  3 unassigned    wu       0                0         (0/0/0)             0
  4 unassigned    wu       0                0         (0/0/0)             0
  5 unassigned    wu       0                0         (0/0/0)             0
  6 unassigned    wu       0                0         (0/0/0)             0
  7 unassigned    wu       0                0         (0/0/0)             0
  8       boot    wu       0 -     0        7.84MB    (1/0/0)         16065
  9 unassigned    wu       0                0         (0/0/0)             0
partition>quit

format> label
[0] SMI Label
[1] EFI Label
Specify Label type[0]: 0
Ready to label disk, continue? y

做镜像

退出 format,在 rpool 里增加新硬盘作为第1一块硬盘 mirror,会出现以下报错:

# zpool attach -f rpool c8t0d0 c8t1d0
cannot label 'c8t1d0': EFI labeled devices are not supported on root pools.

我们必须把 VTOC 从第1块硬盘拷贝到第2块硬盘,注意这里 s2 是 slice(分区),c8t0d0s2 是 c8t0d0 的 s2 分区,注意上面打印的分区显示 s2 代表整个硬盘,看 Blocks 发现 s2 = s0 + s8,s0 是 root 分区,s8 是 boot 分区:

# prtvtoc /dev/rdsk/c8t0d0s2 | fmthard -s - /dev/rdsk/c8t1d0s2
fmthard: Partition 2 specifies the full disk and is not equal
full size of disk.  The full disk capacity is 488343870 sectors.
fmthard:  New volume table of contents now in place.

新硬盘的 c8t1d0s0 分区做成 c8t0d0s0 的镜像,注意上面打印的分区显示 s0 是 root 分区,有 232.85GB 空间,也是我们想 mirror 的分区:

# zpool attach -f rpool c8t0d0s0 c8t1d0s0
Please be sure to invoke installgrub(1M) to make 'c8t1d0s0' bootable.

安装 grub

这一步非常重要,需要把 grub 安装在第二块硬盘上:

# installgrub -m /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c8t1d0s0
Updating master boot sector destroys existing boot managers (if any).
continue (y/n)?y

校验 pool

校验 pool 后查看校验后状态:

# zpool scrub rpool

# zpool status
  pool: rpool
 state: ONLINE
 scrub: scrub in progress for 0h0m, 0.95% done, 0h26m to go
config:

        NAME        STATE     READ WRITE CKSUM
        rpool       ONLINE       0     0     0
          c8t0d0s0  ONLINE       0     0     0
          c8t1d0s0  ONLINE       0     0     0

errors: No known data errors
分享到:
评论

相关推荐

    zfs-0.8.4 zfs zfs-0.8.4安装包

    首先,ZFS的关键特性之一是其集成的存储池(Storage Pool)概念。存储池允许用户将多个磁盘(包括HDD和SSD)组合在一起,形成一个逻辑存储单元,从而提高了存储空间的利用率和性能。通过条带化(Striping)、镜像...

    Unix系统zfs文件系统的使用

    此外,ZFS还支持数据压缩和磁盘空间的动态扩展。 **5. 销毁ZFS文件系统** 当不再需要某个文件系统时,可以使用`zfs destroy`命令将其删除: ```bash zfs destroy pool_name/fs_name ``` **6. 销毁ZFS存储池** ...

    zfs-remote-mirror, 关于为家庭使用设置远程ZFS镜像的详细教程.zip

    zfs-remote-mirror, 关于为家庭使用设置远程ZFS镜像的详细教程 用于家庭使用的远程镜像更新:现在使用内置 ZFS 树莓派 映像 ! 跳转到附录以获得更多信息。 in: Flash 图像,更改密钥,发送快照。 注意:对于ECC内存...

    Solaris ZFS管理指南

    - **新ZFS系统进程**:增加了专门用于监控和维护ZFS存储池健康状态的后台进程,提高了系统的稳定性和响应速度。 - **ZFS设备替换增强功能**:简化了设备更换流程,当存储设备发生故障时,可以快速替换并自动重建...

    solaris-11_zfs文件系统划分

    1.1.2 创建 mirror pool:镜像池提供了数据冗余,两个或更多磁盘的数据完全相同,提高了可靠性。创建命令如 `zpool create pool_name mirror /dev/rdsk/c0t0d0 /dev/rdsk/c0t1d0`。 1.1.3 创建 raidz zpool:RAIDZ ...

    zfs-master.rar

    存储池是由一个或多个磁盘组成的,通过条带化、镜像、RAID-Z等技术确保数据的冗余和安全性。ZFS的另一个独特之处在于它的“一切皆为文件”的设计,包括文件、块设备甚至元数据,都以文件的形式存在,这样简化了管理...

    SUN的ZFS文件系统介绍和使用

    ZFS支持将多个磁盘组织成池(pool),称为vdev(virtual devices)。这种设计允许灵活的扩展性,你可以添加新的硬盘到池中,而无需中断服务,实现无缝的数据迁移和容量扩展。 3. **Snapshot and Cloning**: ZFS...

    运行在linux下的ZFS

    5. **池化存储**:ZFS将磁盘组织成存储池,可以跨多个硬盘进行条带化、镜像或RAID-Z,从而提高性能和容错能力。 6. **高级压缩**:ZFS支持LZ4、ZSTD等多种压缩算法,可以在写入数据时自动进行压缩,节省存储空间。 ...

    ZFS相关资料

    4. **池化存储**:ZFS将多个物理硬盘组合成一个逻辑存储池,可以动态扩展存储容量,并且支持不同大小和类型的硬盘混用。 5. **空间效率**:ZFS使用精简分配和块克隆技术,只在数据写入时才分配实际的磁盘空间,避免...

    ZFS源码安装包

    3. **存储池**:ZFS打破了传统单个硬盘的限制,支持多个物理磁盘组成一个逻辑存储池,方便管理和扩展存储容量。 4. **高级缓存机制**:ZFS内置了L2ARC(Level 2 Adaptive Replacement Cache)和ZIL(ZFS Intent Log...

    Solaris Zfs 学习笔记

    - **创建mirror pool**:镜像池由两个或更多相同大小的磁盘组成,提供数据冗余,提高了数据安全性。 - **创建raidz zpool**:类似RAID-Z,使用纠删码技术,可以在磁盘故障时恢复数据,相比镜像池提供了更高的存储...

    ZFS文件系统的预读策略

    ZFS(Zettabyte File System)是一种先进的文件系统,它最初是由Sun Microsystems公司开发的。由于其设计的复杂性和许多创新特性,ZFS是一个非常强大且高度可扩展的文件系统。预读策略是ZFS的一个重要特性,它涉及到...

    zfs disk layout

    首先,ZFS采用了一个层级化的存储模型,其中包含了多个层级,包括存储池(pool)、虚拟设备(vdevs)、分区(partitions)、镜像和RAID-Z。ZFS存储池由一个或多个虚拟设备组成,而虚拟设备可以是单个磁盘、镜像对...

    zfs文件系统源码包

    ZFS(Zettabyte File System)是一个先进的、64位的、开源的文件系统,最初由Sun Microsystems开发,现在在多个开源项目中被广泛使用,包括OpenSolaris、FreeBSD和Linux。它提供了数据完整性检查、高效的数据压缩、...

Global site tag (gtag.js) - Google Analytics