Làm thế nào để nói rsync để giữ dấu thời gian trên các tệp khi cây nguồn có điểm được gắn


42

Liên quan đến câu hỏi này

Mô tả ngắn về vấn đề:

Khi cây nguồn có điểm được gắn bên trong nó, thì dấu thời gian trên các tệp bên trong điểm được gắn khi được sao chép vào cây đích không được bảo tồn ngay cả khi sử dụng -atùy chọn

Miêu tả cụ thể:

Giả sử đây là cây nguồn:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

data/trên được gắn đĩa USB ngoài. Tất cả mọi thứ là ext4hệ thống tập tin. Tất cả mọi thứ trong nguồn đều thuộc sở hữu của tôi me.

BACKUP cũng tình cờ là một điểm gắn kết, đĩa USB sao lưu.

Sau khi ban hành lệnh này rsync -av --delete /home/me/ /home/BACKUP/, tôi thấy rằng /home/BACKUP/data/và mọi thứ bên dưới nó đều có dấu thời gian hiện tại, như thể các tệp này đã được tạo ngay bây giờ và không phải là dấu thời gian trên các tệp trong đó /home/me/data/. Các tập tin và thư mục khác bên ngoài datađã có dấu thời gian được bảo quản OK.

Câu hỏi là: Làm thế nào để sử dụng rsynctrong cài đặt ở trên để bảo nó bảo toàn dấu thời gian trên tất cả các tệp và thư mục ngay cả trên các tệp và thư mục trên một điểm được gắn?

Tôi đang dùng:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30

Câu trả lời:


46

từ man rsync:

   -t, --times                 preserve modification times

EDIT - để cải thiện câu trả lời này vì không rõ ràng ngay lập tức tại sao điều này không giúp OP:

OP đang sao chép các tập tin từ hệ thống tập tin này sang hệ thống tập tin khác và muốn bảo tồn c-time. Hầu hết mọi người hiểu c-timecó nghĩa là "tạo thời gian" không chính xác trên hầu hết các hệ thống UNIX / Linux (hệ thống tệp Windows theo dõi thời gian "tạo" hoặc "sinh").

Đối với hầu hết các phần, trong UNIX và Linux, c-timelà dấu thời gian được sử dụng để ghi lại hange inode ' C ' cuối cùng . Một nút thay đổi nếu bất kỳ thuộc tính nào của nó được cập nhật:

OP không thể bảo vệ c-timetệp của họ khi chúng được đưa lên hệ thống tệp mới. Việc tạo các tệp này trong các hệ thống tệp mới là một trong những điều kiện được liệt kê ở trên (tạo inode / tệp).

/CHỈNH SỬA


9
Cảm ơn bạn. Tôi biết điều đó. Nhưng xin vui lòng đọc lại câu hỏi một cách cẩn thận. Tôi đã sử dụng -amà nói: archive mode; equals -rlptgoD do -tđã được bao gồm.
Nasser

1
bạn đang cố gắng duy trì thời gian thay đổi? ctime KHÔNG dành cho "đã tạo" thay đổi (trạng thái) của nó
h3rrmiller

1
Tôi muốn nó hoạt động giống như trên các tệp không có trên đĩa được gắn. tức là giữ cùng một dấu thời gian mà người ta nhìn thấy khi thực hiện ls -ltrên tệp. Điều này hoạt động trên các tập tin không nằm trong điểm gắn kết. Nhưng tất cả các tệp nằm trong điểm gắn kết, có dấu thời gian trên chúng cho biết chúng vừa được tạo. Bất cứ điều gì bạn gọi lần này. Tôi chỉ muốn nó sử dụng cùng một dấu thời gian trên các tệp trong nguồn. Bây giờ thì không. Tôi muốn tất cả các khía cạnh thời gian được sao chép. tức là một bản sao của tập tin được thực hiện. thời gian tạo, thay đổi thời gian, v.v ...
Nasser

4
thời gian thay đổi (ctime) được cập nhật khi có thay đổi đối với inode (nghĩa là tạo / thay đổi quyền / di chuyển / v.v.). bởi vì bạn đang tạo một inode mới (vì bạn đang sao chép tệp qua một hệ thống tệp (các bảng inode riêng biệt) nên ctime được cập nhật. Không có cách nào khác vì đó là sự thay đổi của inode chứ không phải tệp. vi.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller

3
ls -lhiển thị mtime (sửa đổi) không phải ctime
h3rrmiller

6

như hr3miller đã nói, -a (hoặc --archive) bằng với -rlptgoD và đã bao gồm thời gian đồng bộ hóa.

Tuy nhiên khi rsync sao chép dữ liệu vào, vd. ngàm NFS / FAT32 / NTFS trong đó việc bảo quản người dùng và chủ sở hữu không thành công, rsync sẽ không cố gắng đặt thời gian. Rsync sẽ cảnh báo với một cái gì đó như

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

Do đó, bỏ việc bảo vệ người dùng và nhóm bằng cách sử dụng

-rlptD

thay vì

-rlptgoD

Chỉ sử dụng điều này khi không bảo vệ chủ sở hữu và nhóm là một lựa chọn cho bạn. Lưu ý rằng việc bảo tồn các liên kết tượng trưng và các tính năng khác cũng có thể kích hoạt hành vi đó. Bạn sẽ phải đi qua trang man cho mọi tính năng rsync (-r -l -p -t -g -o -D) mà bạn muốn sao lưu.


-2

Tôi sử dụng rsync -azvà chắc chắn rằng nó bảo vệ tôi thời gian sửa đổi. Tôi đã kiểm tra lại nó ngay bây giờ.


2
Đó là bởi vì -a( --archive) bao gồm -t.
heemayl

Tuy nhiên không, ctime không thể được thiết lập lại tùy ý. (Tôi đã hiểu nhầm quesiton ban đầu, xin lỗi.)
Mik
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.