Аналогічно до попередніх постів:
цей пост не претендує на вичерпність, є спрощеним варіантом HOWTO, та швидше стосується невеликих систем, які при потребі можна відносно безболісно вимкнути як ціле на якийсь час.
Отож, квоти. Річ, яка допомагає адміністраторам не допускати несправедливості, а користувачам контролювати свої пориви :-)
Детально про квоти в Lustre описано в "21. Configuring and Managing Quotas" (Lustre 2.0 Operations Manual). Однак, там трапляються доволі грубі помилки. Одна з них -- для ввімкнення квот на MDS Lustre 2.0 слід писати mdd.quota_type (!) а не mds.quota_type. При чому, якщо написати не те, то помилки будуть дуже дивними, поведінка - непослідовною. (Аж до того, що іноді MDT монтуватиметься, а іноді - ні).
Деяка загальна інформація про них:
- Обмежуватися може як об'єм, так і кількість inode (грубо - кількість файлів та інших об'єктів файлової системи (ФС))
- Квоти можуть існувати як для окремих користувачів, так і для їх груп.
- Квоти розподілені, як і сама ФС.
- Клієнтські usrquota та grpquota ніякої ролі не грають, всім клієнтам нав'язуються ті ж самі квоти.
- Квоти для root не "змушуються".
- Керування квотами здійснюється за допомогою lfs, після монтування ФС.
1. Ввімкнення квот
1.1 Перевірка наявності модуля lquotes
[root@mds ~]# lsmod | grep lquota lquota 233416 5 mdd ptlrpc 1094728 13 cmm,mdt,mdd,mds,mgs,mgc,lustre,lov,osc,lquota,mdc,fid,fld obdclass 853672 33 cmm,osd_ldiskfs,mdt,mdd,mds,fsfilt_ldiskfs,mgs,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ptlrpc lvfs 81976 18 cmm,osd_ldiskfs,mdt,mdd,mds,fsfilt_ldiskfs,mgs,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ptlrpc,obdclass libcfs 256552 20 cmm,osd_ldiskfs,mdt,mdd,mds,fsfilt_ldiskfs,mgs,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ksocklnd,ptlrpc,obdclass,lnet,lvfs [root@ossX ~]# lsmod | grep lquota lquota 233416 5 obdfilter ptlrpc 1094728 10 obdfilter,ost,mgc,lustre,lov,osc,lquota,mdc,fid,fld obdclass 853672 28 obdfilter,fsfilt_ldiskfs,ost,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ptlrpc lvfs 81976 14 obdfilter,fsfilt_ldiskfs,ost,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ptlrpc,obdclass libcfs 256552 16 obdfilter,fsfilt_ldiskfs,ost,mgc,lustre,lov,osc,lquota,mdc,fid,fld,ksocklnd,ptlrpc,obdclass,lnet,lvfs
1.2 Розмонтування.
Цього кроку, особливо на великих системах, можна уникнути. Але, для простоти, розмонтовуємо всі клієнти, всі сервери у наступному порядку: OSS, MDT i MGS.
1.3 Конфігурування підтримки квот
На MDS виконуємо команду tunefs.lustre --param mdd.quota_type=ug /dev/<mdt_device> --writeconf.
- --writeconf очищає деякі внутрішні логи Lustre, можливо в даному випадку і не є необхідним.
- Слід писати саме --param mdd.quota_type=ug, в документації, станом на середину серпня 2011, є помилка! (Стосується версії Lustre 2.0).
- ug вказує на використання квот для u(sers) i g(roups) -- користувачів та груп.
- Можливим є вказання версії файла квот (ug1, ug2), але зазвичай це не є потрібним.
Увага! Якщо квоти вже так чи інакше вмикалися, (а це можна побачити, виконавши, наприклад, вищевказану команду із ключем --dryrun), то для зміни параметра mdd.quota_type слід користуватися опцією erase-params. Причина в тому, що команда, записана вище, просто додасть ще один параметр, а не замістить старий. Користуватися erase-params слід обережно, бо вона стирає ВСІ попередні параметри. Виглядатиме це так:
[root@mgs ~]# tunefs.lustre --writeconf --erase-param --mgsnode=192.168.1.123@tcp --param=mdd.quota_type=ug /dev/md4 checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: lustre0-MDT0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x1 (MDT ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: mgsnode=192.168.1.123@tcp Permanent disk data: Target: lustre0-MDT0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x141 (MDT update writeconf ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: mgsnode=192.168.1.123@tcp mdd.quota_type=ug
Як було видно із секції "Read previous values:", ніяких параметрів, крім mgsnode не існувало, тому вказуємо тільки його: --mgsnode=192.168.1.123@tcp.
Наступний крок -- ввімкнення підтримки квот на всіх OSS. (Не "запускайте" Люстру, де тільки частина OSS/MDS має ввімкнені квоти, результати можуть бути несподівані). Команда -- аналогічна, "tunefs.lustre --param ost.quota_type=ug /dev/md4 --writeconf". На цей раз без сюрпризів -- ost він і є ost. Аналогічно, якщо спроба вмикати квоти вже була, слід користуватися --erase-params та результатами роботи з ключем --dryrun, щоб відновити всі параметри системи.
Наприклад:
[root@ossX ~]# tunefs.lustre --writeconf --dryrun /dev/md4 checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x2 (OST ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp failover.mode=failout Permanent disk data: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x102 (OST writeconf ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp failover.mode=failout exiting before disk write.
Завдяки --dryrun реальних змін у ФС не внесено: "exiting before disk write.".
Бачимо два параметри: "Parameters: mgsnode=192.168.1.123@tcp failover.mode=failout", які і слід вказати заново.
[root@ossX ~]# tunefs.lustre --writeconf --erase-param --mgsnode=192.168.1.123@tcp \
--param="ost.quota_type=ug" --param="failover.mode=failout" /dev/md4 checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x142 (OST update writeconf ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp mdd.quota_type=ug failover.mode=failout Permanent disk data: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x142 (OST update writeconf ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp ost.quota_type=ug failover.mode=failout Writing CONFIGS/mountdata
Після цього всі цільові пристрої -- MDT, OST, успішно монтуватимуться. Однак, люстра, як ціле, не працюватиме. Щоб виправити це, слід виконати, на розмонтованих цільових пристроях MGS, MDT, OST: tunefs.lustre --writeconf /dev/<device>. Причина цього мені невідома та незрозуміла -- writeconf і так робився під час задання параметрів. (Можливо, достатньо цей крок зробити на MGS?... )
[root@mgs ~]# tunefs.lustre --writeconf /dev/md3 checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: MGS Index: unassigned Lustre FS: lustre Mount type: ldiskfs Flags: 0x74 (MGS needs_index first_time update ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: Permanent disk data: Target: MGS Index: unassigned Lustre FS: lustre Mount type: ldiskfs Flags: 0x174 (MGS needs_index first_time update writeconf ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: Writing CONFIGS/mountdata [root@mds ~]# tunefs.lustre --writeconf /dev/md4 checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: lustre0-MDT0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x1 (MDT ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: mgsnode=192.168.1.123@tcp mdd.quota_type=ug Permanent disk data: Target: lustre0-MDT0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x101 (MDT writeconf ) Persistent mount opts: iopen_nopriv,user_xattr,errors=remount-ro Parameters: mgsnode=192.168.1.123@tcp mdd.quota_type=ug Writing CONFIGS/mountdata [root@ossX ~]# tunefs.lustre --writeconf /dev/md4
checking for existing Lustre data: found CONFIGS/mountdata Reading CONFIGS/mountdata Read previous values: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x2 (OST ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp ost.quota_type=ug failover.mode=failout Permanent disk data: Target: lustre0-OST0000 Index: 0 Lustre FS: lustre0 Mount type: ldiskfs Flags: 0x102 (OST writeconf ) Persistent mount opts: errors=remount-ro,extents,mballoc Parameters: mgsnode=192.168.1.123@tcp ost.quota_type=ug failover.mode=failout Writing CONFIGS/mountdata
На завершення, всі сервери та принаймні один клієнт (бажано на іншому вузлі) слід змонтувати.
1.4 Активація квот
- Монтуємо Lustre, але так, щоб не допускати її змін (читати - можна). (Тобто, наприклад, на координуючій машині Rocks її можна змонтувати read-only - щоб користувачі мали доступ до своїх файлів на час генерації квот, а на одному з вузлів і для запису. Всі роботи проводити з цього вузла. Не забуваємо, що окремі програми пишуть "мимоволі" - бекапи текстових редакторів, конфігурації та "локи" багатьох інших і т.д.)
- Виконуємо lfs quotacheck -ug /lustre0 На заповненій ФС процес тривалий! Хоча, багато швидший ніж "du".
- Вмикаємо квоти: lfs quotaon -ug /lustre0/
- Тепер можна встановити квоти для конкретних користувачів.
Встановлення квот здійснюється так:
lfs setquota -u username -b 209715200 -B 262144000 -i 2000000 -I 2001000 /lustre0
Де:
- -u username -- логін користувача, для якого встановлюємо квоти,
- -b <block-softlimit> -- "м'який" ліміт по розміру,
- -B <block-hardlimit> -- жорсткий ліміт по розміру,
- -i <inode-softlimit> -- "м'який" ліміт кількості inode,
- -I <inode-hardlimit> -- жорсткий ліміт кількості inode.
Одиниця виміру -- 1Кб блок. "Період терпимості" для "м'яких" лімітів по замовчуванню один тиждень. Керувати ним можна за допомогою "lfs setquota -t ...", детальніше див. "man lfs" та "32.1 User Utilities - lfs" (Lustre 2.0 Operations Manual).
Для груп все робиться аналогічно.
2. Отримання інформації про використання квот
Для поточного користувача:
[root@node ~]# lfs quota /lustre0 Disk quotas for user root (uid 0): Filesystem kbytes quota limit grace files quota limit grace /lustre0 344 0 0 - 25 0 0 - Disk quotas for group root (gid 0): Filesystem kbytes quota limit grace files quota limit grace /lustre0 344 0 0 - 25 0 0 -
Для заданого користувача:
[root@node ~]# lfs quota -u username -v /lustre0 Disk quotas for user username (uid 518): Filesystem kbytes quota limit grace files quota limit grace /lustre0 0 209715200 262144000 - 0 2000000 2001000 - lustre0-MDT0000_UUID 0 - 131072 - 0 - 5120 - lustre0-OST0000_UUID 0 - 131072 - - - - -
Для отримання детальної інформації, в тому числі і по використанню OSS, використовується ключ "-v":
[root@node ~]# lfs quota -u username -v /lustre0 Disk quotas for user username (uid 518): Filesystem kbytes quota limit grace files quota limit grace /lustre0 0 209715200 262144000 - 0 2000000 2001000 - lustre0-MDT0000_UUID 0 - 131072 - 0 - 5120 - lustre0-OST0000_UUID 0 - 131072 - -
Для групи:
[root@node ~]# lfs quota -g users /lustre0
Надрукувати grace-limit:
[root@node ~]# lfs quota -t -u /lustre0 Block grace time: 1w; Inode grace time: 1w
Немає коментарів:
Дописати коментар