【问题标题】:Project Quotas in ext4ext4 中的项目配额
【发布时间】:2018-10-05 12:12:19
【问题描述】:

这是关于在 ext4 文件系统上设置项目配额/目录配额的。在 ext4 文件系统中允许 Project Quotas 的补丁是通过补丁 https://lore.kernel.org/patchwork/patch/541895/ 提交的。

我已经尝试了以下步骤(随后是相关命令): 1.在块设备上创建文件系统 mkfs.ext4 /dev/nvme0n1

  1. 启用项目配额 tune2fs -O project -Q prjquota /dev/nvme0n1

  2. 挂载块设备: mount -o prjquota /dev/nvme0n1 /test

  3. 在装载路径上启用配额: 配额 -Pv -F vfsv1 /test

  4. 为项目配额创建项目 ID/项目名称: 回声 51:/test/first >> /etc/projects echo testproj:51 >> /etc/projid

  5. 编辑与项目用户相关的配额:testproj edquota -P testproj

将软块单元设置为 10,将硬块单元设置为 20

  1. 符合设置的配额

repquota -avugP

报告设备 /dev/nvme0n1 上的项目配额 区块宽限期:7天; Inode 宽限期:7 天 块限制文件限制

项目使用软硬优雅使用软硬优雅

testproj -- 0 10 20 0 0 0

  1. 开始在 /test/first 下的上述目录上写入/执行 IO

fallocate -l 10G 十.txt

  1. 我可以看到在所述位置创建了一个大小为 10G 的文件,并且在 #7 中运行上述命令我可以看到消耗的 inode 没有变化。

还有其他步骤可以在 ext4 文件系统上启用配额吗?

内核版本:4.15.0-36-generic

【问题讨论】:

    标签: linux filesystems ext4 xfs


    【解决方案1】:

    我相信你错过了一个

    chattr +P -p 51 /test/first
    

    /etc/projects 似乎只被 XFS 工具使用。此外 /etc/projid 仅用于漂亮的打印。

    这是我想出的程序:

    (第0步实际创建块设备:

    dd if=/dev/zero of=/tmp/fs bs=1024 count=80000
    losetup -f /tmp/fs
    losetup -l
    

    )

    1. 创建具有足够大 inode 的文件系统:
    mkfs.ext4 -I 256 /dev/loop0
    
    1. 启用项目配额并确保文件系统默认挂载(这里使用带有-E的扩展选项,避免在步骤3中使用挂载选项,但也很狡猾,因为你在/proc中看不到它/mounts 照原样安装)
    tune2fs -Q prjquota  /dev/loop0
    tune2fs -E mount_opts=prjquota /dev/loop0
    
    1. 安装它
    mount /dev/loop0 /mnt/loop/
    
    1. quota on 命令似乎没什么用,所以跳过这个

    2. 设置一个项目 ID,但出于对下一个系统管理员登录到您的盒子的纯粹礼貌。实际上不需要

    echo testproj:51 >> /etc/projid
    
    1. 实际上使您的文件夹成为项目的一部分(您的列表中缺少)
    mkdir abc
    chattr +P -p 51 abc
    
    1. 编辑配额。让我们使用 setquota 工具,它可以在未来某天在一些 ansible playbook 中使用,这与运行交互式编辑器的 edquota 不同:
    setquota -P testproj 0 1234 0 0 /mnt/loop/
    
    1. 确认已设置配额
    repquota  -P   /mnt/loop/
    # in some parsable format, assuming you wrote some simple enough strings in projid, since the xml formatter is pretty basic
    repquota -P /mnt/loop/ -O xml
    
    1. 验证它是否有效:

    作为普通用户:

    dd if=/dev/zero of=someoutput oflag=append
    loop0: write failed, project block limit reached.
    dd: writing to 'someoutput': Disk quota exceeded
    2471+0 records in
    2470+0 records out
    1264640 bytes (1.3 MB, 1.2 MiB) copied, 0.00985608 s, 128 MB/s
    
    1. 确认您可以作为普通用户轻松逃脱它:
    chattr  -p 43 someoutput
    dd if=/dev/zero of=someoutput oflag=append
    dd: writing to 'someoutput': No space left on device
    127427+0 records in
    127426+0 records out
    65242112 bytes (65 MB, 62 MiB) copied, 0.561987 s, 116 MB/s
    

    这里完全填满文件系统。

    编辑:有关项目配额限制的更多信息Re: Project Quota file owner could change its project ID?、Re: ext4 and project quotas bugs (/ features)

    【讨论】:

    • 注意-I 256在使用mkfs.ext4的时候已经是默认了,所以部分答案有点多余。
    • ``` > mkfs.ext4 /tmp/bar mke2fs 1.45.5 (07-Jan-2020) ... > tune2fs -l /tmp/bar | grep -i inode\ size Inode size: 128 ``` 不适用于非常小的文件系统。
    猜你喜欢
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2021-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多