Score:3

ฉันจะบีบอัดโฟลเดอร์ในขณะที่รักษาความเป็นเจ้าของไฟล์ได้อย่างไร

ธง mx

ฉันมีเซิร์ฟเวอร์นักเทียบท่าที่ฉันต้องการสำรองข้อมูล โฟลเดอร์การปรับใช้ของฉันมีความเป็นเจ้าของและการอนุญาตที่เฉพาะเจาะจงมากในการสนับสนุนคอนเทนเนอร์ของฉัน:

$ ls -lhaF /opt/นักเทียบท่า
รวม 32K
drwxr-xr-x 7 devops devops 4.0K 23 ส.ค. 02:34 น./
drwxr-xr-x 6 รูท 4.0K 23 ส.ค. 04:20 ../
drwxrwxr-x 2 devops devops 4.0K 21 ส.ค. 00:00 น. certs/
drwxrwxr-x 2 devops devops 4.0K 23 ส.ค. 03:53 .scripts/
-rw-rw-r-- 1 devops devops 1.2K 21 ส.ค. 01:52 docker-compose.yml
drwxrwxr-x 4 1,000 1,000 4.0K 21 ส.ค. 02:05 minecraft/
drwxrwxr-x 4 devops devops 4.0K 20 ส.ค. 23:38 หลุม/
drwx------ 19 70 70 4.0K ส.ค. 19 01:31 postgres/

ฉันพยายามบีบอัดโฟลเดอร์นี้โดยใช้คำสั่งต่อไปนี้ จากสิ่งที่ฉันได้อ่านการรักษาสิทธิ์/ความเป็นเจ้าของไฟล์จำเป็นต้องทำงาน น้ำมันดิน เป็น root/sudo:

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

คำสั่งนี้บีบอัดโฟลเดอร์ แต่การตรวจสอบ .tar.gz แสดงว่าเป็นเจ้าของโฟลเดอร์ทั้งหมดแล้ว:

$tar -tvf /tmp/server-backup.tar.gz
drwxr-xr-x รูท/รูท 0 2021-08-23 12:10 ./
drwxr-xr-x รูท/รูท 0 2021-08-23 12:10 ./minecraft/
-rw-r--r-- root/root 2 2021-08-23 12:10 ./minecraft/whitelist.json
-rw-r--r-- รูท/รูท 111 23/08/2021 12:10 ./minecraft/usercache.json
-rw-r--r-- รูท/รูท 1204 23-08-23 12:10 ./minecraft/server.properties
-rw-r--r-- รูท/รูท 43626592 23-08-23 23:10 ./minecraft/minecraft_server.1.17.1.jar
-rw-r--r-- รูท/รูท 68 23/08/2021 12:10 ./minecraft/eula.txt
-rw-r--r-- รูท/รูท 2 2021-08-23 12:10 ./minecraft/banned-players.json
-rw-r--r-- รูท/รูท 2 2021-08-23 12:10 ./minecraft/banned-ips.json
# - ไฟล์ minecraft อื่น ๆ
drwxr-xr-x รูท/รูท 0 2021-08-23 12:10 ./.certs/
# -- เนื้อหาของโฟลเดอร์ Certs ถูกแก้ไขแล้ว
drwx------ รูท/รูท 0 2021-08-23 12:10 ./postgres/
drwx------ รูท/รูท 0 2021-08-23 12:10 ./postgres/pg_subtrans/
-rw------- รูท/รูท 8192 23-08-23 12:10 ./postgres/pg_subtrans/0000
drwx------ รูท/รูท 0 2021-08-23 12:10 ./postgres/pg_multixact/
drwx------ รูท/รูท 0 2021-08-23 12:10 ./postgres/pg_multixact/offsets/
-rw------- รูท/รูท 8192 23-08-23 12:10 ./postgres/pg_multixact/offsets/0000
drwx------ root/root 0 2021-08-23 12:10 ./postgres/pg_multixact/members/
-rw------- รูท/รูท 8192 23-08-23 12:10 ./postgres/pg_multixact/members/0000
drwx------ รูท/รูท 0 2021-08-23 12:10 ./postgres/pg_xact/
-rw------- รูท/รูท 8192 2021-08-23 12:10 ./postgres/pg_xact/0000
# -- ไฟล์ postgres อื่น ๆ
drwxr-xr-x รูท/รูท 0 23-08-23 12:10 ./pihole/
drwxr-xr-x รูท/รูท 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-- ราก/ราก 5201920 23-08-23 12:10 ./pihole/etc-pihole/gravity.db
-rw-r--r-- ราก/ราก 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-- รูท/รูท 1812161 23-08-23 12:10 ./pihole/etc-pihole/list.1.raw.githubusercontent.com.domains
-rw-r--r-- ราก/ราก 73728 23-08-23 12:10 ./pihole/etc-pihole/pihole-FTL.db
-rw-r--r-- รูท/รูท 0 23-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-- รูท/รูท 95 23/08/2021 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-- รูท/รูท 65 23/08/2021 12:10 ./pihole/etc-pihole/migration_backup/adlists.list
-rw-r--r-- ราก/ราก 618 23-08-23 12:10 ./pihole/etc-pihole/dns-servers.conf
-rw-r--r-- รูท/รูท 20 2021-08-23 12:10 ./pihole/etc-pihole/GitHubVersions
-rw-r--r-- รูท/รูท 44 23/08/2021 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 รูท/รูท 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 รูท/รูท 511 23-08-23 12:10 ./.scripts/new-cert-pihole.sh
-rwxr-xr-x รูท/รูท 345 23-08-23 12:10 ./.scripts/fix-permissions.sh
-rw-r--r-- รูท/รูท 1170 23-08-23 12:10 ./docker-compose.yml

หากฉันพยายามแตกไฟล์ .tar.gz เราสามารถยืนยันได้ว่าความเป็นเจ้าของทั้งหมดหายไป:

$ sudo mkdir /tmp/server-backup
$ sudo tar -xzpf /tmp/server-backup.tar.gz --directory=/tmp/server-backup
$ ls -lhaF /tmp/เซิร์ฟเวอร์สำรองข้อมูล
รวม 32K
drwxr-xr-x 7 รูทรูท 4.0K 23 ส.ค. 12:10 ./
drwxrwxrwt รูท 13 รูท 4.0K 23 ส.ค. 12:16 ../
drwxr-xr-x 2 รูทรูท 4.0K 23 ส.ค. 12:10 .certs/
drwxr-xr-x 2 รูทรูท 4.0K 23 ส.ค. 12:10 .scripts/
-rw-r--r-- 1 รูทรูท 1.2K 23 ส.ค. 12:10 นักเทียบท่า-compose.yml
drwxr-xr-x 4 รูทรูท 4.0K 23 ส.ค. 12:10 minecraft/
drwxr-xr-x 4 รูทรูท 4.0K 23 ส.ค. 12:10 หลุม/
drwx------ 19 รูทรูท 4.0K 23 ส.ค. 12:10 น. postgres /

จากสิ่งที่ฉันพบ การรักษาความเป็นเจ้าของและการอนุญาตควรเป็นพฤติกรรมเริ่มต้นสำหรับ น้ำมันดิน. มีบางอย่างที่ฉันขาดหายไปที่นี่หรือไม่? ฉันต้องการที่จะสามารถสำรองข้อมูลสถานะของเซิร์ฟเวอร์ของฉันได้โดยไม่รบกวนการเป็นเจ้าของไฟล์ที่ละเอียดอ่อนที่จำเป็นสำหรับคอนเทนเนอร์นักเทียบท่าที่ฉันเรียกใช้

ข้อมูลระบบ:

$lsb_release -d
คำอธิบาย: Ubuntu 20.04.3 LTS
$ uname -a
Linux rpi-1 5.4.0-1042-raspi #46-Ubuntu SMP PREEMPT วันศุกร์ที่ 30 กรกฎาคม 00:35:40 UTC 2021 aarch64 aarch64 aarch64 GNU/Linux
muru avatar
us flag
จะเกิดอะไรขึ้นถ้าคุณไม่ใช้แฟล็ก `-p` แค่ `czf` กับ `xzf` เหรอ?
Artur Meinild avatar
vn flag
ฉันเพิ่งทดสอบในโฟลเดอร์แบบสุ่ม และถ้าฉันรัน `tar` บนไฟล์ 2 ไฟล์ที่มีแฟล็ก `-czpf` มันจะคงสิทธิ์ไว้อย่างถูกต้อง
cn flag
สามารถยืนยันได้: นั่นคือสิ่งที่ `-p` (อักษรตัวเล็กไม่ใช่ตัวพิมพ์ใหญ่ P) มีไว้สำหรับ นอกจากนี้ยังมี `--preserve-permissions` / `--same-permissions` และ `--atime-preserve` และ `--same-owner` "จากที่ฉันได้อ่าน การรักษาสิทธิ์/ความเป็นเจ้าของไฟล์ ต้องเรียกใช้ tar เป็น root/sudo:" ไม่ คุณมีตัวเลือกในการป้องกันสิ่งนี้
sudodus avatar
jp flag
ฉันสังเกตเห็นว่าคุณระบุ Ubuntu 20.04.3 LTS สำหรับ Raspberry Pi Point release 3 ยังไม่ออก (แต่ใกล้จะออกแล้ว) คุณใช้ tar เวอร์ชันใด ตรวจสอบกับ `apt-cache นโยบาย tar`; บางทีคุณอาจพบข้อผิดพลาด เนื่องจากผลลัพธ์ของคุณตรงกันข้ามกับสิ่งที่เราหลายคนเคยประสบอาจเป็นข้อบกพร่องใหม่ แต่ก็เป็นไปได้เช่นกันที่ข้อบกพร่องดังกล่าวจะส่งผลกระทบต่อเวอร์ชัน RPi ของ tar เป็นเวลาหลายปี เนื่องจากพวกเราส่วนใหญ่ใช้เวอร์ชันพีซี 'amd64' และจะไม่ได้รับผลกระทบจากมัน
Artur Meinild avatar
vn flag
ฉันเพิ่งทดสอบ Raspberry Pi อีกครั้ง และการอนุญาตยังคงอยู่สำหรับฉัน ใช้ Ubuntu `20.04.3 LTS` (ได้รับการพุชสำหรับการติดตั้งที่มีอยู่แล้ว) และ tar `1.30+dfsg-7ubuntu0.20.04.1` บนทั้งสองแพลตฟอร์ม
Phil H avatar
mx flag
หลังจากการสืบสวนเพิ่มเติม ดูเหมือนว่าผู้ร้ายจะไม่ใช่คำสั่ง `tar` จริง ๆ ฉันใช้ "cp" เพื่อคัดลอกโฟลเดอร์การปรับใช้ของฉันก่อนบีบอัดเพื่อหลีกเลี่ยงข้อผิดพลาดในการอ่าน ฉันไม่ได้ตระหนักว่าคุณต้องรักษาสิทธิ์อย่างชัดแจ้งด้วยบางอย่างเช่น `cp -Rp` ขอบคุณที่ช่วยฉันให้แคบลง
Score:1
ธง mx

เห็นได้ชัดว่า, น้ำมันดิน ไม่ใช่ผู้ร้ายที่นี่ นี่เป็นส่วนหนึ่งของสคริปต์ขนาดใหญ่เพื่อสำรองโฟลเดอร์การปรับใช้ของฉัน ฉันกำลังคัดลอกโฟลเดอร์ก่อนที่จะบีบอัดเพื่อหลีกเลี่ยงการอ่านที่ไม่สอดคล้องกันในขณะที่คอนเทนเนอร์ยังทำงานอยู่ สคริปต์มีดังต่อไปนี้:

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

ความเป็นเจ้าของไฟล์สูญหายระหว่างการคัดลอกโฟลเดอร์ เดอะ -หน้า จำเป็นต้องตั้งค่าสถานะเพื่อรักษาสิทธิ์/ความเป็นเจ้าของในสำเนาโฟลเดอร์ คำสั่งที่ถูกต้องจะเป็นดังนี้:

cp -Rp "/opt/docker" "/tmp/เซิร์ฟเวอร์สำรอง"
tar -czf "/tmp/server-backup.tar.gz" --directory="/tmp/server-backup"
sudodus avatar
jp flag
ขอบคุณที่แสดงและอธิบายวิธีแก้ปัญหา :-)
Artur Meinild avatar
vn flag
ฉันมักจะคัดลอกด้วยตัวเลือก `-a` (เก็บถาวร) ซึ่งเท่ากับ `-dR --preserve=all` นี่เป็นตัวเลือกเดียวที่รักษาทุกสิ่งที่คุณต้องการสงวนไว้สำหรับการสำรองข้อมูล - ฉันยังมีนามแฝงสำหรับมันด้วย: `alias cpa='cp -a'`
Phil H avatar
mx flag
@ArturMeinild ขอบคุณ! ฉันจะจำไว้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา