Browse Source
Merge pull request #1161 from trapexit/fix
Workaround older gcc bug with namespacing std::hash
pull/1165/head
2.35.0
trapexit
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
15 additions and
51 deletions
-
man/mergerfs.1
-
src/fs_wait_for_mount.cpp
|
|
@ -1866,24 +1866,8 @@ of rsync or run rsync with the tool \[lq]nocache\[rq]. |
|
|
|
\f[B]filesystem\f[R] itself. |
|
|
|
Not the pool with the cache filesystem. |
|
|
|
You could have data loss if the source is the cache pool. |
|
|
|
.IP |
|
|
|
.nf |
|
|
|
\f[C] |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
if [ $# != 3 ]; then |
|
|
|
echo \[dq]usage: $0 <cache-fs> <backing-pool> <days-old>\[dq] |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
CACHE=\[dq]${1}\[dq] |
|
|
|
BACKING=\[dq]${2}\[dq] |
|
|
|
N=${3} |
|
|
|
|
|
|
|
find \[dq]${CACHE}\[dq] -type f -atime +${N} -printf \[aq]%P\[rs]n\[aq] | \[rs] |
|
|
|
rsync --files-from=- -axqHAXWES --preallocate --remove-source-files \[dq]${CACHE}/\[dq] \[dq]${BACKING}/\[dq] |
|
|
|
\f[R] |
|
|
|
.fi |
|
|
|
.PP |
|
|
|
mergerfs.time-based-mover |
|
|
|
.SS percentage full expiring |
|
|
|
.PP |
|
|
|
Move the oldest file from the cache to the backing pool. |
|
|
@ -1893,32 +1877,8 @@ Continue till below percentage threshold. |
|
|
|
\f[B]filesystem\f[R] itself. |
|
|
|
Not the pool with the cache filesystem. |
|
|
|
You could have data loss if the source is the cache pool. |
|
|
|
.IP |
|
|
|
.nf |
|
|
|
\f[C] |
|
|
|
#!/bin/bash |
|
|
|
|
|
|
|
if [ $# != 3 ]; then |
|
|
|
echo \[dq]usage: $0 <cache-fs> <backing-pool> <percentage>\[dq] |
|
|
|
exit 1 |
|
|
|
fi |
|
|
|
|
|
|
|
CACHE=\[dq]${1}\[dq] |
|
|
|
BACKING=\[dq]${2}\[dq] |
|
|
|
PERCENTAGE=${3} |
|
|
|
|
|
|
|
set -o errexit |
|
|
|
while [ $(df --output=pcent \[dq]${CACHE}\[dq] | grep -v Use | cut -d\[aq]%\[aq] -f1) -gt ${PERCENTAGE} ] |
|
|
|
do |
|
|
|
FILE=$(find \[dq]${CACHE}\[dq] -type f -printf \[aq]%A\[at] %P\[rs]n\[aq] | \[rs] |
|
|
|
sort | \[rs] |
|
|
|
head -n 1 | \[rs] |
|
|
|
cut -d\[aq] \[aq] -f2-) |
|
|
|
test -n \[dq]${FILE}\[dq] |
|
|
|
rsync -axqHAXWESR --preallocate --remove-source-files \[dq]${CACHE}/./${FILE}\[dq] \[dq]${BACKING}/\[dq] |
|
|
|
done |
|
|
|
\f[R] |
|
|
|
.fi |
|
|
|
.PP |
|
|
|
mergerfs.percent-full-mover |
|
|
|
.SH PERFORMANCE |
|
|
|
.PP |
|
|
|
mergerfs is at its core just a proxy and therefore its theoretical max |
|
|
|
|
|
@ -19,6 +19,7 @@ |
|
|
|
#include "fs_wait_for_mount.hpp"
|
|
|
|
#include "syslog.hpp"
|
|
|
|
|
|
|
|
#include <functional>
|
|
|
|
#include <thread>
|
|
|
|
#include <unordered_set>
|
|
|
|
|
|
|
@ -30,15 +31,18 @@ namespace fs |
|
|
|
|
|
|
|
constexpr std::chrono::milliseconds SLEEP_DURATION = std::chrono::milliseconds(333); |
|
|
|
|
|
|
|
template<> |
|
|
|
struct std::hash<fs::Path> |
|
|
|
namespace std |
|
|
|
{ |
|
|
|
std::size_t |
|
|
|
operator()(fs::Path const &path_) const noexcept |
|
|
|
template<> |
|
|
|
struct hash<fs::Path> |
|
|
|
{ |
|
|
|
return std::hash<std::string>{}(path_.string()); |
|
|
|
} |
|
|
|
}; |
|
|
|
std::size_t |
|
|
|
operator()(fs::Path const &path_) const noexcept |
|
|
|
{ |
|
|
|
return std::hash<std::string>{}(path_.string()); |
|
|
|
} |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
static |
|
|
|
void |
|
|
|