Я проверил 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
Как я могу использовать системный вызов Quatactl Linux для установки квоты проекта в файловой системе ext4 ⇐ Linux
1751268595
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 (по системному вызову).
Подробнее здесь: [url]https://stackoverflow.com/questions/79684359/how-can-i-use-quotactl-system-call-of-linux-to-set-project-quota-in-ext4-filesys[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия