簡體   English   中英

如何檢查 XFS 是否已啟用配額?

[英]How can I check that quotas have been enabled is XFS?

我有一個應該使用prjquota標志安裝的文件系統。 但是由於人為因素,有人可能會忘記這樣做,所以我需要檢查應用程序啟動時是否啟用了配額。 我認為可以使用帶有Q_GETFMT作為 subcmd 參數的Q_GETFMT進行檢查。 但它總是將標志設置為 0。我做錯了什么?

我嘗試將device作為 XFS 下文件的絕對路徑和實際設備的路徑。 但沒有結果。

bool isQuotaEnabled(const std::filesystem::path &device)
{
    uint32_t buff{};
    quotactl(QCMD(Q_GETFMT, PRJQUOTA), device.c_str(), 0, (caddr_t)&buff);
    return buff;
}
// The argument is something like "/dev/loop1"
bool isQuotaEnabled(const std::filesystem::device& device)
{
    fs_quota_stat info{};
    if (quotactl(QCMD(Q_XGETQSTAT, PRJQUOTA), device.data(), 0, (caddr_t)&info) == -1) {
        throw std::system_error(errno, std::system_category(), "quotactl");
    }

    return static_cast<bool>(info.qs_flags & (XFS_QUOTA_PDQ_ACCT | XFS_QUOTA_PDQ_ENFD));
}

PRJQUOTA用於項目配額。 用你需要的替換它。

       Q_XGETQSTAT
              Returns XFS filesystem-specific quota information in the
              fs_quota_stat structure pointed by addr.
Quota enabling flags (of format XFS_QUOTA_[UGP]DQ_{ACCT,ENFD})
          are defined without a leading "X", as
          FS_QUOTA_[UGP]DQ_{ACCT,ENFD}.
                  XFS_QUOTA_PDQ_ACCT  /* Project quota accounting */
                  XFS_QUOTA_PDQ_ENFD  /* Project quota limits enforcement */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM