Add defrag docs, fix trace message
This commit is contained in:
+33
-4
@@ -11,6 +11,8 @@ Vitastor has two file system implementations. Both can be used via `vitastor-nfs
|
||||
Commands:
|
||||
- [mount](#mount)
|
||||
- [start](#start)
|
||||
- [upgrade](#upgrade)
|
||||
- [defrag](#defrag)
|
||||
|
||||
## Pseudo-FS
|
||||
|
||||
@@ -86,10 +88,6 @@ POSIX features currently not implemented in VitastorFS:
|
||||
- Modification time (`mtime`) is updated lazily every second (like `-o lazytime`)
|
||||
|
||||
Other notable missing features which should be addressed in the future:
|
||||
- Defragmentation of "shared" inodes. Files smaller than pool object size (block_size
|
||||
multiplied by data part count if pool is EC) are internally stored in large block
|
||||
volumes sequentially, one after another, and leave garbage after deleting or resizing.
|
||||
Defragmentator will be implemented to collect this garbage.
|
||||
- Inode ID reuse. Currently inode IDs always grow, the limit is 2^48 inodes, so
|
||||
in theory you may hit it if you create and delete a very large number of files
|
||||
- Compaction of the key-value B-Tree. Current implementation never merges or deletes
|
||||
@@ -139,6 +137,37 @@ Start network NFS server. Options:
|
||||
| `--port <PORT>` | use port \<PORT> for NFS services (default is 2049) |
|
||||
| `--portmap 0` | do not listen on port 111 (portmap/rpcbind, requires root) |
|
||||
|
||||
### upgrade
|
||||
|
||||
`vitastor-nfs --fs <NAME> upgrade`
|
||||
|
||||
Upgrade FS metadata. Can be run online, but server(s) should be restarted after upgrade.
|
||||
|
||||
### defrag
|
||||
|
||||
`vitastor-nfs --fs <NAME> defrag [OPTIONS] [--dry-run]`
|
||||
|
||||
Defragment volumes used for small file storage having more than \<defrag_percent> %
|
||||
of data removed. Can be run online.
|
||||
|
||||
In VitastorFS, small files are stored in large "volumes" / "shared inodes" one
|
||||
after another. When you delete or extend such files, they are moved and garbage is left
|
||||
behind. Defragmentation removes garbage and moves data still in use to new volumes.
|
||||
|
||||
Options:
|
||||
|
||||
| <!-- --> | <!-- --> |
|
||||
|--------------------------|------------------------------------------------------------------------ |
|
||||
| --volume_untouched 86400 | Defragment volumes last appended to at least this number of seconds ago |
|
||||
| --defrag_percent 50 | Defragment volumes with at least this % of removed data |
|
||||
| --defrag_block_count 16 | Read this number of pool blocks at once during defrag |
|
||||
| --defrag_iodepth 16 | Move up to this number of files in parallel during defrag |
|
||||
| --trace | Print verbose defragmentation status |
|
||||
| --dry-run | Skip modifications, only print status |
|
||||
| --recalc-stats | Recalculate all volume statistics |
|
||||
| --include-empty | Include old and empty volumes; make sure to restart NFS servers before using it |
|
||||
| --no-rm | Move, but do not delete data |
|
||||
|
||||
## Common options
|
||||
|
||||
| <!-- --> | <!-- --> |
|
||||
|
||||
+36
-5
@@ -11,6 +11,8 @@
|
||||
Команды:
|
||||
- [mount](#mount)
|
||||
- [start](#start)
|
||||
- [upgrade](#upgrade)
|
||||
- [defrag](#defrag)
|
||||
|
||||
## Псевдо-ФС
|
||||
|
||||
@@ -88,11 +90,6 @@ JSON-формате :-). Для инспекции содержимого БД
|
||||
- Времена модификации (`mtime`) отслеживаются асинхронно (как будто ФС смонтирована с `-o lazytime`)
|
||||
|
||||
Другие недостающие функции, которые нужно добавить в будущем:
|
||||
- Дефрагментация "общих инодов". На уровне реализации ФС файлы, меньшие, чем размер
|
||||
объекта пула (block_size умножить на число частей данных, если пул EC),
|
||||
упаковываются друг за другом в большие "общие" иноды/тома. Если такие файлы удалять
|
||||
или увеличивать, они перемещаются и оставляют за собой "мусор", вот тут-то и нужен
|
||||
дефрагментатор.
|
||||
- Переиспользование номеров инодов. В текущей реализации номера инодов всё время
|
||||
увеличиваются, так что в теории вы можете упереться в лимит, если насоздаёте
|
||||
и наудаляете больше, чем 2^48 файлов.
|
||||
@@ -145,6 +142,40 @@ JSON-формате :-). Для инспекции содержимого БД
|
||||
| `--port <PORT>` | использовать порт \<PORT> для NFS-сервисов (по умолчанию 2049) |
|
||||
| `--portmap 0` | отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий) |
|
||||
|
||||
### upgrade
|
||||
|
||||
`vitastor-nfs --fs <NAME> upgrade`
|
||||
|
||||
Обновить метаданные ФС. Можно запускать онлайн (при запущенных серверах NFS), но после выполнения их всё
|
||||
же желательно перезапустить.
|
||||
|
||||
### defrag
|
||||
|
||||
`vitastor-nfs --fs <NAME> defrag [OPTIONS] [--dry-run]`
|
||||
|
||||
Дефрагментировать тома, используемые для хранения мелких файлов, в которых более, чем
|
||||
<defrag_percent> процентов данных удалено. Можно запускать онлайн.
|
||||
|
||||
На уровне реализации ФС файлы, меньшие, чем размер объекта пула (block_size умножить на число
|
||||
частей данных, если пул EC), упаковываются друг за другом в большие "тома" / "общие иноды".
|
||||
Когда такие файлы удаляются или увеличиваются, они перемещаются и оставляют за собой "мусор".
|
||||
|
||||
При дефрагментации мусор удаляется, а всё ещё используемые данные перемещаются в новые тома.
|
||||
|
||||
Опции:
|
||||
|
||||
| <!-- --> | <!-- --> |
|
||||
|--------------------------|------------------------------------------------------------------------ |
|
||||
| --volume_untouched 86400 | Дефрагментировать только тома, в которые уже не писали это число секунд |
|
||||
| --defrag_percent 50 | Дефрагментировать только тома, в которых этот % данных удалён |
|
||||
| --defrag_block_count 16 | Читать это количество блоков пула за один раз |
|
||||
| --defrag_iodepth 16 | Перемещать одновременно до этого числа файлов |
|
||||
| --trace | Печатать детальную статистику дефрагментации |
|
||||
| --dry-run | Не производить никаких изменений, только описать выполняемые действия |
|
||||
| --recalc-stats | Пересчитать и сохранить статистику всех томов |
|
||||
| --include-empty | Дефрагментировать старые и пустые тома; обязательно перезапустите NFS-сервера после использования этой опции |
|
||||
| --no-rm | Перемещать, но не удалять данные |
|
||||
|
||||
## Общие опции
|
||||
|
||||
| <!-- --> | <!-- --> |
|
||||
|
||||
@@ -139,8 +139,10 @@ void kv_fs_defrag_t::handle_read()
|
||||
{
|
||||
fprintf(
|
||||
stderr, was_moved
|
||||
? "Moved inode 0x%jx (%ju bytes) from volume 0x%jx offset 0x%ju\n"
|
||||
: "Inode 0x%jx (%ju bytes) data in volume 0x%jx at offset 0x%ju is unused",
|
||||
? (dry_run
|
||||
? "In use inode 0x%jx (%ju bytes) in volume 0x%jx at offset 0x%jx\n"
|
||||
: "Moved inode 0x%jx (%ju bytes) in volume 0x%jx at offset 0x%jx\n")
|
||||
: "Unused inode 0x%jx (%ju bytes) in volume 0x%jx at offset 0x%jx\n",
|
||||
ino, alloc, shared_ino, shared_offset
|
||||
);
|
||||
}
|
||||
|
||||
@@ -69,12 +69,16 @@ static const char* help_text =
|
||||
" --portmap 0 do not listen on port 111 (portmap/rpcbind, requires root)\n"
|
||||
"\n"
|
||||
"vitastor-nfs --fs <NAME> upgrade\n"
|
||||
" Upgrade FS metadata. Can be run online, but server should be restarted\n"
|
||||
" Upgrade FS metadata. Can be run online, but server(s) should be restarted\n"
|
||||
" after upgrade.\n"
|
||||
"\n"
|
||||
"vitastor-nfs --fs <NAME> defrag [OPTIONS] [--dry-run]\n"
|
||||
" Defragment volumes used for small file storage having more than\n"
|
||||
" <defrag_percent> %% of data removed. Can be run online. Options:\n"
|
||||
" Defragment volumes used for small file storage having more than <defrag_percent> %%\n"
|
||||
" of data removed. Can be run online.\n"
|
||||
" In VitastorFS, small files are stored in large \"volumes\" / \"shared inodes\" one\n"
|
||||
" after another. When you delete or extend such files, they are moved and garbage is left\n"
|
||||
" behind. Defragmentation removes garbage and moves data still in use to new volumes.\n"
|
||||
" Options:\n"
|
||||
" --volume_untouched 86400\n"
|
||||
" Defragment volumes last appended to at least this number of seconds ago\n"
|
||||
" --defrag_percent 50\n"
|
||||
|
||||
Reference in New Issue
Block a user