mirror of
https://github.com/trapexit/mergerfs.git
synced 2025-01-22 12:05:15 +08:00
Merge pull request #1161 from trapexit/fix
Workaround older gcc bug with namespacing std::hash
This commit is contained in:
commit
26c8b5c642
|
@ -1866,24 +1866,8 @@ of rsync or run rsync with the tool \[lq]nocache\[rq].
|
||||||
\f[B]filesystem\f[R] itself.
|
\f[B]filesystem\f[R] itself.
|
||||||
Not the pool with the cache filesystem.
|
Not the pool with the cache filesystem.
|
||||||
You could have data loss if the source is the cache pool.
|
You could have data loss if the source is the cache pool.
|
||||||
.IP
|
.PP
|
||||||
.nf
|
mergerfs.time-based-mover
|
||||||
\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
|
|
||||||
.SS percentage full expiring
|
.SS percentage full expiring
|
||||||
.PP
|
.PP
|
||||||
Move the oldest file from the cache to the backing pool.
|
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.
|
\f[B]filesystem\f[R] itself.
|
||||||
Not the pool with the cache filesystem.
|
Not the pool with the cache filesystem.
|
||||||
You could have data loss if the source is the cache pool.
|
You could have data loss if the source is the cache pool.
|
||||||
.IP
|
.PP
|
||||||
.nf
|
mergerfs.percent-full-mover
|
||||||
\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
|
|
||||||
.SH PERFORMANCE
|
.SH PERFORMANCE
|
||||||
.PP
|
.PP
|
||||||
mergerfs is at its core just a proxy and therefore its theoretical max
|
mergerfs is at its core just a proxy and therefore its theoretical max
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
#include "fs_wait_for_mount.hpp"
|
#include "fs_wait_for_mount.hpp"
|
||||||
#include "syslog.hpp"
|
#include "syslog.hpp"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
|
@ -30,15 +31,18 @@ namespace fs
|
||||||
|
|
||||||
constexpr std::chrono::milliseconds SLEEP_DURATION = std::chrono::milliseconds(333);
|
constexpr std::chrono::milliseconds SLEEP_DURATION = std::chrono::milliseconds(333);
|
||||||
|
|
||||||
template<>
|
namespace std
|
||||||
struct std::hash<fs::Path>
|
|
||||||
{
|
{
|
||||||
std::size_t
|
template<>
|
||||||
operator()(fs::Path const &path_) const noexcept
|
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
|
static
|
||||||
void
|
void
|
||||||
|
|
Loading…
Reference in New Issue
Block a user