Как я могу использовать системный вызов Quatactl Linux для установки квоты проекта в файловой системе ext4Linux

Ответить
Anonymous
 Как я могу использовать системный вызов Quatactl Linux для установки квоты проекта в файловой системе ext4

Сообщение Anonymous »

Я проверил man7.org, чтобы найти ответ, и я обнаружил, что подбород q_setquota of quotactl, кажется, поддерживает только квоту пользователя и группы? < /p>
Q_SETQUOTA
Set quota information for user or group id, using the
information supplied in the dqblk structure pointed to by
addr. The dqb_valid field of the dqblk structure indicates
which entries in the structure have been set by the caller.
This operation supersedes the Q_SETQLIM and Q_SETUSE
operations in the previous quota interfaces. This
operation requires privilege (CAP_SYS_ADMIN).
< /code>
И у меня также есть демонстрация для тестирования, но столкнулся с запутанной проблемой.cmd := exec.Command("chattr", "+P", "-p", projectIDStr, dir)
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("chattr +P -p %s failed for %s: %v, output: %s", projectIDStr, dir, err, string(output))
}
< /code>
и используйте q_setquota subop of quotactl, чтобы установить prjquota hardlimit. < /p>
dq := dqblk{
dqbBHardlimit: uint64(blocks), // Block hard limit
dqbBSoftlimit: 0, // Block soft limit (0 means no limit)
dqbIHardlimit: 0, // Inode hard limit (0 means no limit)
dqbISoftlimit: 0, // Inode soft limit (0 means no limit)
dqbValid: 0x3F, // Mark all fields as valid
}
_, _, errno := unix.Syscall6(
unix.SYS_QUOTACTL,
uintptr(qCMD(Q_SETQUOTA, PRJQUOTA)),
uintptr(unsafe.Pointer(bytePtrFromString)),
uintptr(projectID),
uintptr(unsafe.Pointer(&dq)),
0, 0)
if errno != 0 {
return fmt.Errorf("set project quota limit failed: %w", errno)
}
< /code>
После запуска я использовал lsattr и repquota, затем я встретил ошибку. < /p>
lsattr показывает, что я создал проект с 510803453 id.lsattr -p /data00/local
510803453 --------------e--P- /data00/local/pv1
< /code>
Но repquota -p ничего не показывает. < /p>
repquota -P /data00
*** Report for project quotas on device /dev/nvme0n1p3
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
Project used soft hard grace used soft hard grace
----------------------------------------------------------------------
#0 -- 254412560 0 0 1201073 0 0
< /code>
Итак, мой вопрос: если я неправильно использовал системный вызов Quatactl? и как установить предел Prjquota с помощью кода Pure GO (по системному вызову).

Подробнее здесь: https://stackoverflow.com/questions/796 ... t4-filesys
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»