Знадобилося тут видалити том GlusterFS, але без того, щоб грохнути фізично брік. Треба було просто звільнити на ньому місце. На томі жило кілька мільйонів дрібних файлів, терміни піджимали, рішення «в лоб не було».

У чому загвоздка: GlusterFS на бріку організовує дані хитрим способом. По-перше, відтворюється нормальна структура даних, така ж само, яку бачить користувач, коли монтує том. По-друге, створюється підкаталог .glusterfs, який містить хардлінки на ці файли, ну тільки з іншими назвами (відповідно до використовуваного алгоритму хешування). Якщо робити тупий rm -rf, find . -delete чи навіть rsync –delete, то нічого хорошого швидко не вийде, оскільки кожний файл буде видалятися як мінімум двічі (а то й більшу кількість разів), і місце на диску звільнятиметься тільки після видалення останнього хардлінка кожного файла.

Тому в голову прийшло спочатку робити truncate:

find . -type f -print -exec truncate --size=0 {} \;

А потім уже робити видалення пустих файлів:

rsync -av -H --progress --delete empty/ folder/

Тільки так можна швидко звільнити місце за наявності кількох мільйонів файлів із хардлінками.

Так ми чекаємо на файли:

#!/bin/bash
sudo hciconfig hci0 piscan
sdptool add --channel=10 OPUSH
obexftpd -b -v

А так ми їх відправляємо:

#!/bin/bash
hcitool scan
echo -n "Enter device MAC: "
read mac
echo -n "Enter local file location: "
read lfile
echo -n "Enter remote file location: "
read rfile
obexftp -b $mac -c "$rfile" -p "$lfile"