Puncte:3

Cum comprim un folder păstrând în același timp proprietatea fișierului

drapel mx

Am un server Docker pe care vreau să-l fac backup. Dosarul meu de implementare are drepturi de proprietate și permisiuni foarte specifice pentru a accepta containerele mele:

$ ls -lhaF /opt/docker
total 32K
drwxr-xr-x 7 devops devops 4.0K 23 august 02:34 ./
drwxr-xr-x 6 root root 4.0K 23 august 04:20 ../
drwxrwxr-x 2 devops devops 4.0K 21 august 00:00 .certs/
drwxrwxr-x 2 devops devops 4.0K 23 august 03:53 .scripts/
-rw-rw-r-- 1 devops devops 1.2K 21 august 01:52 docker-compose.yml
drwxrwxr-x 4 1000 1000 4.0K 21 august 02:05 minecraft/
drwxrwxr-x 4 devops devops 4.0K 20 august 23:38 pihole/
drwx------ 19 70 70 4.0K 19 august 01:31 postgres/

Apoi încerc să comprim acest folder folosind următoarea comandă. Din câte am citit, păstrarea permisiunilor/proprietatea fișierelor necesită rulare gudron ca root/sudo:

$ sudo tar -czpf "/tmp/server-backup.tar.gz" --directory="/opt/docker" .

Această comandă comprimă folderul, dar inspectând .tar.gz, arată că proprietatea tuturor folderelor este acum root:

$ tar -tvf /tmp/server-backup.tar.gz
drwxr-xr-x root/root 0 2021-08-23 12:10 ./
drwxr-xr-x root/root 0 2021-08-23 12:10 ./minecraft/
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/whitelist.json
-rw-r--r-- root/root 111 2021-08-23 12:10 ./minecraft/usercache.json
-rw-r--r-- root/root 1204 2021-08-23 12:10 ./minecraft/server.properties
-rw-r--r-- root/root 43626592 2021-08-23 12:10 ./minecraft/minecraft_server.1.17.1.jar
-rw-r--r-- root/root 68 2021-08-23 12:10 ./minecraft/eula.txt
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/banned-players.json
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/banned-ips.json
# -- Alte fișiere minecraft
drwxr-xr-x root/root 0 2021-08-23 12:10 ./.certs/
# -- Conținutul dosarului de certificate a fost redactat
drwx------ root/root 0 2021-08-23 12:10 ./postgres/
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_subtrans/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_subtrans/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/offsets/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_multixact/offsets/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/members/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_multixact/members/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_xact/
-rw------- root/root 8192 2021-08-23 12:10 ./postgres/pg_xact/0000
# -- Alte fișiere postgres
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/custom.list
-rw-r--r-- root/root 5201920 2021-08-23 12:10 ./pihole/etc-pihole/gravity.db
-rw-r--r-- root/root 485 2021-08-23 12:10 ./pihole/etc-pihole/setupVars.conf
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/setupVars.conf.update.bak
-rw-r--r-- root/root 1812161 2021-08-23 12:10 ./pihole/etc-pihole/list.1.raw.githubusercontent.com.domains
-rw-r--r-- root/root 73728 2021-08-23 12:10 ./pihole/etc-pihole/pihole-FTL.db
-rw-r--r-- root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/pihole-FTL.conf
-rw-r--r-- root/root 37 2021-08-23 12:10 ./pihole/etc-pihole/local.list
-rw-r--r-- root/root 95 2021-08-23 12:10 ./pihole/etc-pihole/list.1.raw.githubusercontent.com.domains.sha1
-rw-r--r-- root/root 20 2021-08-23 12:10 ./pihole/etc-pihole/localbranches
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-pihole/migration_backup/
-rw-r--r-- root/root 65 2021-08-23 12:10 ./pihole/etc-pihole/migration_backup/adlists.list
-rw-r--r-- root/root 618 2021-08-23 12:10 ./pihole/etc-pihole/dns-servers.conf
-rw-r--r-- root/root 20 2021-08-23 12:10 ./pihole/etc-pihole/GitHubVersions
-rw-r--r-- root/root 44 2021-08-23 12:10 ./pihole/etc-pihole/localversions
drwxr-xr-x root/root 0 2021-08-23 12:10 ./pihole/etc-dnsmasq.d/
-rw-r--r-- root/root 1475 2021-08-23 12:10 ./pihole/etc-dnsmasq.d/01-pihole.conf
drwxr-xr-x root/root 0 2021-08-23 12:10 ./.scripts/
-rwxr-xr-x root/root 1638 2021-08-23 12:10 ./.scripts/create-backup.sh
-rwxr-xr-x root/root 511 2021-08-23 12:10 ./.scripts/new-cert-pihole.sh
-rwxr-xr-x root/root 345 2021-08-23 12:10 ./.scripts/fix-permissions.sh
-rw-r--r-- root/root 1170 2021-08-23 12:10 ./docker-compose.yml

Dacă încerc să extrag fișierul .tar.gz, putem confirma că toată proprietatea a fost pierdută:

$ sudo mkdir /tmp/server-backup
$ sudo tar -xzpf /tmp/server-backup.tar.gz --directory=/tmp/server-backup
$ ls -lhaF /tmp/server-backup
total 32K
drwxr-xr-x 7 root root 4.0K 23 august 12:10 ./
drwxrwxrwt 13 rădăcină rădăcină 4.0K 23 august 12:16 ../
drwxr-xr-x 2 root root 4.0K 23 august 12:10 .certs/
drwxr-xr-x 2 root root 4.0K 23 august 12:10 .scripts/
-rw-r--r-- 1 rădăcină rădăcină 1.2K 23 august 12:10 docker-compose.yml
drwxr-xr-x 4 root root 4.0K 23 august 12:10 minecraft/
drwxr-xr-x 4 root root 4.0K 23 august 12:10 pihole/
drwx------ 19 root root 4.0K 23 august 12:10 postgres/

Din ceea ce am descoperit, păstrarea dreptului de proprietate și a permisiunilor ar trebui să fie un comportament prestabilit pentru gudron. Este ceva ce îmi lipsește aici? Aș dori să pot face o copie de rezervă a stării serverului meu fără a strica proprietatea delicată a fișierelor cerută de unele dintre containerele docker pe care le conduc.

Informatii despre sistem:

$ lsb_release -d
Descriere: Ubuntu 20.04.3 LTS
$ uname -a
Linux rpi-1 5.4.0-1042-raspi #46-Ubuntu SMP PREEMPT Vin. 30 iulie 00:35:40 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
muru avatar
drapel us
Ce se întâmplă dacă nu folosiți steag-ul `-p`? Doar `czf` și `xzf`?
Artur Meinild avatar
drapel vn
Tocmai am testat într-un folder aleatoriu și dacă rulez `tar` pe 2 fișiere cu steagurile `-czpf`, păstrează corect permisiunile.
drapel cn
Poate confirma: pentru asta este `-p` (litera mică, nu P majuscul). există, de asemenea, `--preserve-permissions` / `--same-permissions` și `--atime-preserve` și `--same-owner` "Din ceea ce am citit, păstrarea permisiunilor/proprietatea fișierului necesită rularea tar ca root/sudo:" nu, aveți opțiuni pentru a preveni acest lucru.
sudodus avatar
drapel jp
Observ că specificați Ubuntu 20.04.3 LTS pentru Raspberry Pi. Point release 3 nu este încă lansat (dar foarte aproape de a fi lansat). Ce versiune de tar rulezi? Verificați cu `politica apt-cache tar`; poate ai găsit o eroare, deoarece rezultatele tale sunt contrare cu ceea ce am experimentat mulți dintre noi.Ar putea fi un bug nou, dar este, de asemenea, posibil ca bug-ul să fi afectat versiunea RPi a tar de ani de zile, deoarece majoritatea dintre noi folosim versiunea pentru PC „amd64” și nu ar fi niciodată afectați de aceasta.
Artur Meinild avatar
drapel vn
Tocmai am testat din nou pe Raspberry Pi, iar permisiunile sunt încă păstrate pentru mine. Rularea Ubuntu `20.04.3 LTS` (au fost împins pentru instalările existente) și tar `1.30+dfsg-7ubuntu0.20.04.1` pe ambele platforme.
Phil H avatar
drapel mx
După investigații suplimentare, se pare că vinovatul nu este de fapt comanda `tar`. Folosisem `cp` pentru a copia folderul meu de implementare înainte de a comprima pentru a evita erorile de citire. Nu mi-am dat seama că trebuie să păstrați în mod explicit permisiunile cu ceva de genul `cp -Rp`. Mulțumesc că m-ai ajutat să restrâng acest lucru.
Puncte:1
drapel mx

Aparent, gudron nu este vinovat aici. Aceasta a făcut parte dintr-un script mai mare pentru a face backup pentru folderul meu de implementare. Copiam folderul înainte de comprimare pentru a evita incoerențe de citire în timp ce containerele încă rulau. Scenariul conținea următoarele:

cp -R „/opt/docker” „/tmp/server-backup”
tar -czf "/tmp/server-backup.tar.gz" --directory="/tmp/server-backup" .

Proprietatea fișierului a fost pierdută în timpul copierii folderului. The -p flag este necesar pentru a păstra permisiunile/proprietatea pe o copie a folderului. Comanda corectă ar fi fost aceasta:

cp -Rp „/opt/docker” „/tmp/server-backup”
tar -czf "/tmp/server-backup.tar.gz" --directory="/tmp/server-backup" .
sudodus avatar
drapel jp
Multumesc pentru ca ai aratat si explicat solutia :-)
Artur Meinild avatar
drapel vn
Copiez de obicei cu opțiunea `-a` (arhivă), care este egală cu `-dR --preserve=all`. Aceasta este o singură opțiune care păstrează tot ceea ce doriți să păstrați pentru o copie de rezervă - chiar am un alias pentru ea: `alias cpa='cp -a'`
Phil H avatar
drapel mx
@ArturMeinild Mulțumesc! O sa tin minte asta.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.