我对 Lustre 文件系统有疑问。如果我有一个大小为 64 GB 的文件并将条带大小设置为 1GB,我的条带数变为 64。但如果我将条带数设置为 128,那么 Lustre 在这种情况下会做什么?
2 回答
考虑到这一点,您可能会错过诸如 OST 数量之类的细节。我将对此进行更详细的说明,因为我在许多人中看到了对条带化的困惑。请多多包涵。
所以对于 64GB 的文件,stripe_size=1GB; 1GB 的条带是 64,但不是 stripe_count。我们可以有任何没有。条带的数量取决于文件大小和 stripe_size,但不是取决于 OST 的 stripe_count。这是一个小实验,我有 2 个 OST 并创建了 64 MB 的文件,其中 stripe_size=1M(默认)...
/dev/loop0 on /mnt/mds1 type lustre (rw,loop=/dev/loop0)
/dev/loop1 on /mnt/ost1 type lustre (rw,loop=/dev/loop1)
/dev/loop2 on /mnt/ost2 type lustre (rw,loop=/dev/loop2)
ashish-203@tcp:/lustre on /mnt/lustre type lustre (rw,user_xattr,flock)
[root@ashish-203 tests]# lfs df -h
UUID bytes Used Available Use% Mounted on
lustre-MDT0000_UUID 146.4M 17.5M 119.4M 13% /mnt/lustre[MDT:0]
lustre-OST0000_UUID 183.1M 25.2M 147.7M 15% /mnt/lustre[OST:0]
lustre-OST0001_UUID 183.1M 25.2M 147.7M 15% /mnt/lustre[OST:1]
filesystem summary: 366.1M 50.3M 295.5M 15% /mnt/lustre
现在我用-c -1创建一个文件foo(所有OST上的条带)......
[root@ashish-203 tests]# lfs setstripe -c -1 /mnt/lustre/foo
[root@ashish-203 tests]# lfs getstripe /mnt/lustre/foo
/mnt/lustre/foo
lmm_stripe_count: 2
lmm_stripe_size: 1048576
lmm_pattern: 1
lmm_layout_gen: 0
lmm_stripe_offset: 1
obdidx objid objid group
1 2 0x2 0
0 2 0x2 0
[root@ashish-203 tests]# dd if=/dev/urandom of=/mnt/lustre/foo bs=1M count=64
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 7.465 s, 9.0 MB/s
[root@ashish-203 tests]# du -h /mnt/lustre/foo
64M /mnt/lustre/foo
[root@ashish-203 tests]# lfs df -h /mnt/lustre/foo
UUID bytes Used Available Use% Mounted on
lustre-MDT0000_UUID 146.4M 17.5M 119.4M 13% /mnt/lustre[MDT:0]
lustre-OST0000_UUID 183.1M 57.2M 115.8M 33% /mnt/lustre[OST:0]
lustre-OST0001_UUID 183.1M 57.2M 115.8M 33% /mnt/lustre[OST:1]
filesystem summary: 366.1M 114.3M 231.6M 33% /mnt/lustre
[root@ashish-203 tests]# lfs getstripe -c /mnt/lustre/foo
2
所以在这里我们可以看到文件 64MB 被创建,stripe_count 为 2,这意味着数据被平等地写入所有 2 个 OST。
stripe_count 等于编号。单个文件中的对象。并且文件的每个对象都存储在不同的 OST 上。因此,是 OST 的数量负责。stripe_count。
现在,当您说如果我将 stripe_count 更改为 128,那么您应该拥有 128 个 OST,如果您不这样做,那么文件将仅在可用的 OST 上进行条带化,这将是您的 stripe_count(如果文件是使用“-c -1”选项创建的) )。
但是如果我将我的条带计数设置为 128,那么 Lustre 在这种情况下会做什么?
因此,如果您假设 64 个 OST,则 luster 将仅在 64 个 OST 上对文件进行条带化
这是上述理论的小实验......
[root@ashish-203 tests]# lfs setstripe -c 4 /mnt/lustre/bar
[root@ashish-203 tests]# dd if=/dev/urandom of=/mnt/lustre/bar bs=1M count=64
64+0 records in
64+0 records out
67108864 bytes (67 MB) copied, 7.31459 s, 9.2 MB/s
[root@ashish-203 tests]# du -h /mnt/lustre/bar
64M /mnt/lustre/bar
[root@ashish-203 tests]# lfs df -h /mnt/lustre
UUID bytes Used Available Use% Mounted on
lustre-MDT0000_UUID 146.4M 17.5M 119.4M 13% /mnt/lustre[MDT:0]
lustre-OST0000_UUID 183.1M 89.2M 83.9M 52% /mnt/lustre[OST:0]
lustre-OST0001_UUID 183.1M 89.2M 83.9M 52% /mnt/lustre[OST:1]
filesystem summary: 366.1M 178.3M 167.7M 52% /mnt/lustre
[root@ashish-203 tests]# lfs getstripe -c /mnt/lustre/bar
2
尽管设置了 stripe_count=4,但您可以看到 stripe_count 为 2,并且数据仅写入了 2 个 OST。
摘要:- 不要将 stripe_count 与否混淆。的条纹。stripe_count 是关于您想要对数据进行条带化的 OST 数量(如果它们可用),并且 stripes = (file size / stripe_size)。
希望能回答你的问题...
如果条带数设置为 128,则使用 128 个条带中的 64 个条带,其余 64 个条带被忽略。Lustre 文件系统以循环方式写入数据,这在条带化时是必需的。此外,为了确保其余的条带不被遗漏,我们需要设置一个属性,以便从第 65 个条带开始写入。