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:
|
Commands:
|
||||||
- [mount](#mount)
|
- [mount](#mount)
|
||||||
- [start](#start)
|
- [start](#start)
|
||||||
|
- [upgrade](#upgrade)
|
||||||
|
- [defrag](#defrag)
|
||||||
|
|
||||||
## Pseudo-FS
|
## Pseudo-FS
|
||||||
|
|
||||||
@@ -86,10 +88,6 @@ POSIX features currently not implemented in VitastorFS:
|
|||||||
- Modification time (`mtime`) is updated lazily every second (like `-o lazytime`)
|
- Modification time (`mtime`) is updated lazily every second (like `-o lazytime`)
|
||||||
|
|
||||||
Other notable missing features which should be addressed in the future:
|
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
|
- 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
|
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
|
- 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) |
|
| `--port <PORT>` | use port \<PORT> for NFS services (default is 2049) |
|
||||||
| `--portmap 0` | do not listen on port 111 (portmap/rpcbind, requires root) |
|
| `--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
|
## Common options
|
||||||
|
|
||||||
| <!-- --> | <!-- --> |
|
| <!-- --> | <!-- --> |
|
||||||
|
|||||||
+36
-5
@@ -11,6 +11,8 @@
|
|||||||
Команды:
|
Команды:
|
||||||
- [mount](#mount)
|
- [mount](#mount)
|
||||||
- [start](#start)
|
- [start](#start)
|
||||||
|
- [upgrade](#upgrade)
|
||||||
|
- [defrag](#defrag)
|
||||||
|
|
||||||
## Псевдо-ФС
|
## Псевдо-ФС
|
||||||
|
|
||||||
@@ -88,11 +90,6 @@ JSON-формате :-). Для инспекции содержимого БД
|
|||||||
- Времена модификации (`mtime`) отслеживаются асинхронно (как будто ФС смонтирована с `-o lazytime`)
|
- Времена модификации (`mtime`) отслеживаются асинхронно (как будто ФС смонтирована с `-o lazytime`)
|
||||||
|
|
||||||
Другие недостающие функции, которые нужно добавить в будущем:
|
Другие недостающие функции, которые нужно добавить в будущем:
|
||||||
- Дефрагментация "общих инодов". На уровне реализации ФС файлы, меньшие, чем размер
|
|
||||||
объекта пула (block_size умножить на число частей данных, если пул EC),
|
|
||||||
упаковываются друг за другом в большие "общие" иноды/тома. Если такие файлы удалять
|
|
||||||
или увеличивать, они перемещаются и оставляют за собой "мусор", вот тут-то и нужен
|
|
||||||
дефрагментатор.
|
|
||||||
- Переиспользование номеров инодов. В текущей реализации номера инодов всё время
|
- Переиспользование номеров инодов. В текущей реализации номера инодов всё время
|
||||||
увеличиваются, так что в теории вы можете упереться в лимит, если насоздаёте
|
увеличиваются, так что в теории вы можете упереться в лимит, если насоздаёте
|
||||||
и наудаляете больше, чем 2^48 файлов.
|
и наудаляете больше, чем 2^48 файлов.
|
||||||
@@ -145,6 +142,40 @@ JSON-формате :-). Для инспекции содержимого БД
|
|||||||
| `--port <PORT>` | использовать порт \<PORT> для NFS-сервисов (по умолчанию 2049) |
|
| `--port <PORT>` | использовать порт \<PORT> для NFS-сервисов (по умолчанию 2049) |
|
||||||
| `--portmap 0` | отключить сервис portmap/rpcbind на порту 111 (по умолчанию включён и требует root привилегий) |
|
| `--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(
|
fprintf(
|
||||||
stderr, was_moved
|
stderr, was_moved
|
||||||
? "Moved inode 0x%jx (%ju bytes) from volume 0x%jx offset 0x%ju\n"
|
? (dry_run
|
||||||
: "Inode 0x%jx (%ju bytes) data in volume 0x%jx at offset 0x%ju is unused",
|
? "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
|
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"
|
" --portmap 0 do not listen on port 111 (portmap/rpcbind, requires root)\n"
|
||||||
"\n"
|
"\n"
|
||||||
"vitastor-nfs --fs <NAME> upgrade\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"
|
" after upgrade.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"vitastor-nfs --fs <NAME> defrag [OPTIONS] [--dry-run]\n"
|
"vitastor-nfs --fs <NAME> defrag [OPTIONS] [--dry-run]\n"
|
||||||
" Defragment volumes used for small file storage having more than\n"
|
" Defragment volumes used for small file storage having more than <defrag_percent> %%\n"
|
||||||
" <defrag_percent> %% of data removed. Can be run online. Options:\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"
|
" --volume_untouched 86400\n"
|
||||||
" Defragment volumes last appended to at least this number of seconds ago\n"
|
" Defragment volumes last appended to at least this number of seconds ago\n"
|
||||||
" --defrag_percent 50\n"
|
" --defrag_percent 50\n"
|
||||||
|
|||||||
Reference in New Issue
Block a user