Найти в Ansible и сохранить в файл

Sí, ZFS asignará espacio adicional para el mismo archivo si se toma una instantánea del conjunto de archivos.

Primero, creemos un conjunto de archivos vacío y preparemos un archivo para copiar. Por razones de simplicidad, la compresión se desactivó y el grupo se creó en un solo disco sin ningún raidz o mirror .

[root@localhost ~]# dd if=/dev/urandom of=/tmp/testfile bs=16M count=1
1+0 records in
1+0 records out
16777216 bytes (17 MB) copied, 0.113345 s, 148 MB/s    


[root@localhost ~]# zpool create tank sdd
[root@localhost ~]# zfs create tank/test

El espacio utilizado en el disco se puede ver con zpool list.

[root@localhost]# zpool list tank
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank    9.94G   182K  9.94G         -     0%     0%  1.00x  ONLINE  -

Ahora copie el archivo en el conjunto de archivos ZFS, cree una instantánea y observe el espacio utilizado.

[root@localhost ~]# /bin/cp /tmp/testfile /tank/test/

[root@localhost ~]# zfs list -t all -r tank/test
NAME        USED  AVAIL  REFER  MOUNTPOINT
tank/test  16.0M  9.61G  16.0M  /tank/test

[root@localhost ~]# zfs snapshot tank/test@1
[root@localhost ~]# zfs list -t all -r tank/test
NAME          USED  AVAIL  REFER  MOUNTPOINT
tank/test    16.0M  9.61G  16.0M  /tank/test
tank/test@1     0B      -  16.0M  -

Bien, copie el mismo archivo nuevamente en la misma ubicación en el conjunto de archivos ZFS y mire el espacio utilizado nuevamente.

[root@localhost ~]# /bin/cp -f /tmp/testfile /tank/test/
[root@localhost ~]# zfs list -t all -r tank/test
NAME          USED  AVAIL  REFER  MOUNTPOINT
tank/test    32.0M  9.60G  16.0M  /tank/test
tank/test@1  16.0M      -  16.0M  -

Además, el espacio en disco utilizado en el grupo está creciendo a 32 MB.

[root@localhost tank]# zpool list tank
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank    9.94G  32.2M  9.91G         -     0%     0%  1.00x  ONLINE  -

Como puede ver, el conjunto de archivos tank/testahora representa 32 MB en total, dividiéndose en 16 MB en el conjunto de archivos tank/testy 16 MB en la instantánea tank/test@1. Además, la salida de zpool listmuestra una asignación de 32 MB en el disco.
Si repite copia y toma una instantánea , el tank/testtotal UTILIZADO crecería aún más.

Actualización

Gracias @Andrew Henle por preguntar.Tuve que actualizar mi respuesta anterior y continuaré con las cosas de deduplicación a continuación.

Hagámoslo de nuevo con un conjunto de archivos que tiene desduplicación habilitada.

[root@localhost]# zfs destroy -r tank/test
[root@localhost]# zfs create tank/test-dedup
[root@localhost]# zfs set dedup=on tank/test-dedup

Omitiré los pasos individuales aquí y solo agregaré el resultado de la descripción general del espacio utilizado.

[root@localhost ~]# zfs list -t all -r tank/test-dedup
NAME                  USED  AVAIL  REFER  MOUNTPOINT
tank                 32.3M  9.61G    24K  /tank
tank/test-dedup      32.1M  9.61G  16.0M  /tank/test-dedup
tank/test-dedup@1    16.0M      -  16.0M  -
[root@localhost ~]# zpool list tank
NAME     SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
tank    9.94G  16.3M  9.92G         -     0%     0%  2.00x  ONLINE  -

Con deduplicación habilitada, aún se informa que la instantánea usa el tamaño extra , pero como puede ver con zpool listla deduplicación está guardando el espacio en disco y proporciona una tasa de deduplicación de 2.

IIRC, en general, no se recomienda utilizar la deduplicación debido al uso intensivo de la memoria y el impacto en el rendimiento resultante. Creo que se está trabajando para mejorar la función de deduplicación en ZFS.

0
11.09.2018, 13:38
2 ответа

В этом случае следует использовать модуль оболочки Ansible .

Вот пример:

- name: Find / -name "postgresql"
  shell: find / -name "postgresql" > /tmp/text.txt
0
28.04.2021, 23:43

Способ Ansible сделать это с модулем поиска может быть (Я использую /var/log/secureв качестве примера, так как я не запускаю postgres):

---
- hosts: all 

  tasks:
  - name: "Find file /var/log/secure"
    find:
      paths: /var/log
      patterns: secure
    register: result

  - name: "Save find results to file"
    copy:
      content: "{{ result.files }}"
      dest: "/tmp/find_result.txt"

Содержание/tmp/find_result.txt:

# cat /tmp/find_result.txt 
[{"uid": 0, "woth": false, "mtime": 1535012977.8429773, "inode": 9013905, "isgid": false, "size": 6867, "wgrp": false, "isuid": false, "isreg": true, "gid": 0, "ischr": false, "wusr": true, "xoth": false, "islnk": false, "nlink": 1, "issock": false, "rgrp": false, "path": "/var/log/secure", "xusr": false, "atime": 1534925281.706685, "isdir": false, "ctime": 1535012977.8429773, "isblk": false, "xgrp": false, "dev": 64768, "roth": false, "isfifo": false, "mode": "0600", "rusr": true}]

Зарегистрировав результат и проверив возвращаемое значение в files, вы получаете доступ к множеству метаданных, которые могут оказаться полезными.

Если вы хотите меньше вывода, используйте одно из других возвращаемых значений, как описано здесь .

1
28.04.2021, 23:43

Теги

Похожие вопросы