Fork me on GitHub
Suzf  Blog

Tag ZFS

How-to fix failed to load ZFS module

在debian 8  使用的过程中 发现 zfs 无法加载

# uname -r
4.x.x-0.bpo.1-amd64
# modprobe zfs
modprobe: FATAL: Module zfs not found.

相关的软件包已经安装了

$ dpkg -l | grep zfs
ii  debian-zfs                          7~jessie                    amd64        Native ZFS filesystem metapackage for Debian.
ii  libzfs2                             0.6.5.7-8-jessie            amd64        Native ZFS filesystem library for Linux
ii  zfs-dkms                            0.6.5.7-8-jessie            all          Native ZFS filesystem kernel modules for Linux
ii  zfsonlinux                          8                           all          archive.zfsonlinux.org trust package
ii  zfsutils                            0.6.5.7-8-jessie            amd64        command-line tools to manage ZFS filesystems
x 是一个正整数

获得注册的模块的版本号

$ dkms  status
spl, 0.6.5.x, 3.x.0-4-amd64, x86_64: installed
zfs, 0.6.5.x, 3.x.0-4-amd64, x86_64: installed

尝试手工编译模块

# dkms remove -m zfs -v 0.6.5.x --all
# dkms remove -m spl -v 0.6.5.x --all
# dkms add -m spl -v 0.6.5.x
# dkms add -m zfs -v 0.6.5.x
# dkms install -m spl -v 0.6.5.x
# dkms install -m zfs -v 0.6.5.x

If you get the same error, then reinstall the headers package:

# apt-get install --reinstall linux-headers-$(uname -r)

重新加载

$ sudo modprobe zfs
$ lsmod  | grep zfs
zfs                  2793472  1 
zunicode              331776  1 zfs
zcommon                53248  1 zfs
znvpair                90112  2 zfs,zcommon
spl                   102400  3 zfs,zcommon,znvpair
zavl                   16384  1 zfs
$ dkms status
spl, 0.6.5.x, 3.x.0-4-amd64, x86_64: installed
spl, 0.6.5.x, 4.x.0-0.bpo.1-amd64, x86_64: installed
zfs, 0.6.5.x, 3.x.0-4-amd64, x86_64: installed
zfs, 0.6.5.x, 4.x.0-0.bpo.1-amd64, x86_64: installed

Reference

[1] https://github.com/zfsonlinux/zfs/issues/1155

[译]How-to set up a redundant storage pool with ZFS and Ubuntu

如果您的数据没有冗余,没有备份,它几乎是不存在的。

大公司将处理任何数据量巨大的关键交易数据,采取数据冗余和备份措施确保数据安全。已经成为行业内的标准。但是对于中小型公司、SOHO(小型办公室、家庭办公室)来说,他们无法承受数据丢失所造成的损失。

不像大公司,许多小型企业,SOHO的和个人工作室甚至没有IT部门,更别说CTOs和CIOs了。

我曾亲自处理庞大的数据 – 我有超过6TB的存储。我在家里有一台文件服务器;
上面有我储存的家庭照片和我的所有文档,这是我生命中最重要的部分之一。

这种方法有很多优势:
因为我所有的数据都存储在同一个位置上,我可以很容易地管理,维护和保护它。
这是一个集中式的文件服务器,因此任何人在我的本地网络可以访问这些文件。
我可以在多个设备上工作 – 笔记本电脑,PC,平板电脑,手机,而不用担心他们之间复制文件。
如果我主要的个人电脑或笔记本电脑坏了,我不用担心抢救存储在计算机上的数据。因为没有什么是永远保存在我家这样的设备。

但是,让所有的鸡蛋放在一个篮子里,这不是一个好主意。所以,你必须给它添加冗余,确保有多个物理备份。

ZFS 就是答案

这里有两个优秀的文件系统可以做这个工作:ZFS 和 Btrfs。
BTRFS是非常新的,仍处于开发状态,所以我不建议使用它。
ZFS,在另一方面,是经过时间考验的,稳定的和极其丰富的功能:
它包括存储池(zpool),写入时复制,快照,数据完整性验证,自动修复,保护功能等。
但也有各地的ZFS一些授权问题,我已经写了以前。

起初,我想到了FreeNAS,跑了一段时间,但我更喜欢使用Linux和完全控制我的服务器。所以我选择了ZFS文件系统与Ubuntu。

以下是如何在Ubuntu上开始使用ZFS。
要求:
14.04 Ubuntu server
至少有三个硬盘驱动器。一个最为 Ubuntu系统的,它必须在一个单独的SSD或硬盘驱动器,两个用于存储池进行安装。
内存至少8GB(1GB为Ubuntu,然后每增加1TB数据增加1GB RAM)
任何像样的CPU。

建议:
我强烈建议任何文件服务器上使用 Ubuntu的LTS(长期支持)版本。
要创建RAID-Z,你最少需要两个具有相同的存储容量的SATA硬盘。如果您有不同容量的硬盘,总存储将是较小的硬盘驱动器的大小。
我强烈建议有第三个外部硬盘驱动器,这样你可以把你的数据定期备份。

一旦你有硬盘驱动器,就可以安装ZFS了。虽然ZFS预装在即将到来的Ubuntu16.04的发布,我们需要在14.04安装 PPA.

sudo apt-add-repository ppa:zfs-native/stable

之后更新 Repo

sudo apt-get update

现在安装软件和加载模块:

sudo apt-get install ubuntu-zfs

sudo /sbin/modprobe zfs

接着运行下面的命令检查在系统上是否有“pools”或硬盘驱动器存在:

sudo zfs list

输出的结果应该是 `no datasets available`。我们知道这里没有创建数据集,但是我们想检验它是否安装正确。 现在是创建磁盘驱动器存储池的时候了。因为您需要在您的系统上识别驱动器。所以第一次运行 lsblk 命令来识别每个驱动器。

sudo lsblk

记下块设备的名称,它应该是 ‘sda, sdb, sdc,’ 现在,我们需要找到每个驱动器的 ID, 我们将在驱动器的“池”中使用它。

sudo ls -l /dev/disk/by-id/

这个命令将会给你一段很长的输出。这是我的系统的一个例子(在我的Ubuntu系统中,我已删除输出的驱动器 SDA。在我的情况下,我将池中使用两个驱动器SDC和SDD):

swapnil@nas:~$ sudo ls -l /dev/disk/by-id/
total 0
lrwxrwxrwx 1 root root 9 Feb 20 17:48 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0318132 -> ../../sdc
lrwxrwxrwx 1 root root 9 Feb 20 17:48 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E4LRJ111 -> ../../sdd
lrwxrwxrwx 1 root root 9 Feb 20 17:48 wwn-0x50014ee20922e8a8 -> ../../sdc
lrwxrwxrwx 1 root root 9 Feb 20 17:48 wwn-0x50014ee20b453ec7 -> ../../sdd

From this output note down the IDs that start with ‘wwn’, so in my case it was ‘wwn-0x50014ee20922e8a8’ and ‘wwn-0x50014ee20b453ec7’

现在让我以这种格式创建 zpool:

zpool create -f -o ashift=12 -m <mount_point> <pool_name> raidz <ID_of_the_first_drive> <id_of_the_second_drive>

在我的这种情况下,挂在点是 ‘/mnt/bank’, pool 是 ‘swapool’

zpool create -f -o ashift=12 -m /mnt/bank swapool raidz wwn-0x50014ee20922e8a8 wwn-0x50014ee20b453ec7

一旦做检查状态,这可能需要一段时间。

sudo zfs list

这一次,你会得到一些输出,这意味着你的 pool 创建成功。现在这两个硬盘将镜像文件。为了进一步增加冗余,你可以添加更多的驱动器。 在开始将文件复制到 pool 之前,您还有更多的工作要做。您必须创建 “数据集”,并将这些数据存储在这些数据集内。数据集是ZFS的功能创建的像目录或文件夹一样。您可以为不同的文件类型创建一些数据集或只创建一个数据集。一旦创建了一个数据集,您就可以在里面创建普通的目录或文件了。 这是创建数据集的命令:

sudo zfs create <pool_name>/directory_name

这里是在我的系统中的例子,我对不同类型的文件创建了不同的数据集:

sudo zfs create swapool/images
sudo zfs create swapool/music
sudo zfs create swapool/movies
sudo zfs create swapool/documents
sudo zfs create swapool/ebooks

这样,你将为您的数据有一个非常有组织的结构。 一旦创建了所有所需的数据集,您就需要在池中更改文件权限,以便正常的系统用户可以对其进行写入。

sudo chown -R user_name:group_name /path_of_pool

Example:

sudo chown -R swapnil:users /mnt/bank/

现在您的所有配置都配置完毕。开始将您的文件存储在新创建的冗余文件存储中。在后续的文章中,我将涉及到此存储的定期维护,如何自动备份驱动器上的数据,并通过本地网络访问此存储,将其变成一个文件服务器。

源文:How-to set up a redundant storage pool with ZFS and Ubuntu

相关链接:

http://open-zfs.org/wiki/System_Administration

https://www.freebsd.org/doc/zh_CN.UTF-8/books/handbook/filesystems-zfs.html