Tengo un problema de uso del disco con rsync
y --link-dest
La copia de seguridad incremental ocupa todo el espacio del disco:
@localhost media]$ ls orig ---------------------------------------------------- localhost media]$ du -sh . 25M . ---------------------------------------------------- localhost media]$ rsync -avh orig/ full ---------------------------------------------------- @localhost media]$ du -sh . 49M . ---------------------------------------------------- localhost media]$ echo 1111 > orig/foo111 ---------------------------------------------------- localhost media]$ rsync -avh --link-dest=full orig/ orig_1 ---------------------------------------------------- localhost media]$ ls orig_1/foo111 orig_1/foo111 _____________________________________________________ localhost media]$ ls full/foo111 ls: cannot access full/foo111: No such file or directory
Todo se ve bien hasta ahora. El último cambio se refleja en orig_1
pero los directorios no están vinculados y todos están en tamaño completo.
----------------------------------------------------- localhost media]$ du -sh . 74M . --------------------------------------------- localhost media]$ du -sh orig_1/ 25M orig_1/ -------------------------------------------- localhost media]$ du -sh orig 25M orig --------------------------------------------- localhost media]$ du -sh full 25M full
¿Se supone que debo tener el tamaño orig_1
como 0? Y el comando stat
no muestra enlaces duros. ¿Qué estoy haciendo mal?
Cuando ejecutó rsync -avh --link-dest=full orig/ orig_1
, ignoró este mensaje de error (es más obvio si elimina -v
):
--link-dest arg does not exist: full
Si luego echamos un vistazo a man rsync
en --link-dest
, encontramos:
If DIR is a relative path, it is relative to the destination directory.
Y ahí está. full
es relativo al directorio actual. En relación con el directorio de destino, sería ../full
.
Si vuelve a intentarlo con rsync -avh --link-dest=../full orig/ orig_1
, obtiene lo que espera:
$ du -sh * 149M full 149M orig 232K orig_1 $ du -sh . 298M .
Tenga en cuenta que, cuando se cuentan individualmente, los directorios siguen apareciendo ocupando todo el espacio:
$ du -sh orig_1 149M orig_1
Esto se debe a que du
realiza un seguimiento de los archivos que ya ha visto y evita contarlos dos veces.
--link-dest
toma una ruta relativa al destino. Quiere --link-dest=../orig
.
Los sistemas de archivos estándar de Unix no permiten enlaces duros a directorios, excepto el especial .
y ..
enlaces. --link-dest
solo crea enlaces duros para archivos, el resto de la estructura de directorios se recrea como directorios reales.
E incluso si se permitieran los enlaces duros a los directorios, du
seguiría mostrando el tamaño completo de cada enlace. Cuando se usan enlaces duros, no hay distinción entre el original y el enlace, cada uno de ellos son solo nombres que se refieren a un inodo en particular, y du
los escanearía de manera equivalente.