bash lực lượng sao chép trên cùng một tập tin


7

Sysadmin của chúng tôi đã tạo ra một hệ thống sao lưu tạo ảnh chụp nhanh của ổ cứng.

Khi tôi cố gắng khôi phục phiên bản cũ hơn từ ảnh chụp nhanh:

cp /path/to/snapshots/foo.bar /path/to/folder/foo.bar

Tôi gặp lỗi:

cp: `/path/to/snapshots/foo.bar' and  `/path/to/folder/foo.bar' are the same file. 

Tôi có thể xóa tập tin và sao chép nó nhưng tôi muốn biết liệu có cách nào để làm điều này với cp không.

Tôi biết rằng các tập tin không được liên kết bởi vì:

  1. Tôi có thể thay đổi nội dung của nguồn và ảnh chụp nhanh được giữ nguyên (đã kiểm tra)
  2. Tôi có thể xóa nguồn và ảnh chụp nhanh ở đó để khôi phục (đã kiểm tra)
  3. Các tập tin được lưu trữ trên cụm tính toán đại học. Nếu điều đó là đúng, ai đó sẽ bị sa thải (hoặc ít nhất là hét vào).

Tuy nhiên, inodesố lượng các tập tin là như nhau

Cụm được triển khai trên linux mũ đỏ và tôi không biết hệ thống tệp là gì

kết quả df:

Filesystem           1K-blocks      Used Available Use% Mounted on
<ipadress>:/vol/hpc/storage
                      67633152  67633152         0 100% /storage
<ipadress>:/vol/hpc/storage
                     2186805248 982498048 1204307200  45% /storage

kết quả thống kê:

  File: `/path/to/snapshots/foo.bar'
  Size: 404         Blocks: 8          IO Block: 4096   regular file
Device: 17h/23d Inode: 19750461    Links: 1
Access: (0644/-rw-r--r--)  Uid: (<num1>/  yotama9)   Gid: ( <num2>/ <groupname>)
Access: 2012-01-22 00:03:27.246852000 +0200
Modify: 2012-01-19 23:10:32.746397000 +0200
Change: 2012-01-19 23:10:32.746397000 +0200
  File: `/path/to/folder/foo.bar'
  Size: 404         Blocks: 8          IO Block: 4096   regular file
Device: 17h/23d Inode: 26335134    Links: 1
Access: (0644/-rw-r--r--)  Uid: (<num1>/  yotama9)   Gid: ( <num2>/ <groupname>)
Access: 2012-01-24 16:03:48.732453000 +0200
Modify: 2012-01-24 16:03:30.728900000 +0200
Change: 2012-01-24 16:03:30.728900000 +0200

1
Bạn có chắc chắn đường dẫn nguồn không phải là một liên kết tượng trưng đến đường dẫn đích?
enzotib

6
Dường như các tập tin là một và giống nhau .. tức là. cái này là một liên kết cứng của cái kia. run ls -l -itrên cả hai tập tin để xem nếu inodesố lượng là như nhau. Nếu số inode giống nhau, thì bạn không có bản sao lưu; điều đó có nghĩa là chỉ có 1 tệp thực và 1 liên kết cứng đến tệp đó,
Peter.O

Tôi đã chỉnh sửa câu hỏi của mình, chúng không liên kết cứng
Yotam

1
Tất nhiên họ. 1. Làm thế nào để bạn thay đổi nguồn? Có thể trình soạn thảo của bạn sử dụng một tệp tạm thời và sau đó sao chép nó. Hãy thử echo x >> foo.bar. Hoặc kiểm tra xem inode có còn như cũ không sau khi bạn thay đổi theo cách của mình. 2. Đó là ý tưởng. Bạn xóa một liên kết, liên kết còn lại.
angus

Hệ điều hành nào và hệ thống tập tin nào có liên quan? Bạn biết gì về cách các snapshot được thiết lập? Không df /path/to/snapshot /path/to/source; ls -l /path/to/snapshot /path/to/source; stat /path/to/snapshot /path/to/sourcethể hiện điều gì?
Gilles 'SO- ngừng trở nên xấu xa'

Câu trả lời:


4

Thông thường, việc triển khai hệ thống tệp được cho là đảm bảo cho các chương trình ứng dụng rằng tại bất kỳ thời điểm nào trên một máy nhất định, mỗi tệp có thể được xác định duy nhất bằng cách kết hợp ID thiết bị của nó ( st_devtrường trong statcấu trúc ) và inode của nó ( st_inotrường). ID thiết bị cho biết hệ thống tập tin được gắn mà tập tin đang bật và nút inode đặc trưng cho một tập tin bên trong một hệ thống tập tin cụ thể. cpcoi hai tệp giống hệt nhau nếu chúng có cùng ID thiết bị và cùng một nút.

Có thể có nhiều hơn một cặp (ID thiết bị, inode) cho một tệp nếu nó được truy cập thông qua các phương tiện khác nhau, ví dụ như gắn NFS vào localhost (các kịch bản như vậy có xu hướng kỳ lạ).

Không nên để các tệp khác nhau có cùng cặp (ID thiết bị, inode). Tuy nhiên, điều này phụ thuộc vào việc thực hiện hệ thống tập tin. Nếu bạn có thể thay đổi nội dung của nguồn mà không thay đổi ảnh chụp nhanh, thì tôi sẽ mong rằng ảnh chụp nhanh sẽ hiển thị ID thiết bị khác với nguồn, nhưng có thể một số triển khai ngoài đó không làm điều này.

Lưu ý rằng ngoài việc thay đổi tệp, các thử nghiệm của bạn không chứng minh được gì. Xóa một liên kết cứng sẽ không xóa các tên khác của tệp. Chỉ sao chép tệp theo yêu cầu đối với ảnh chụp nhanh, do đó sẽ không có gì bất thường nếu tệp trong ảnh chụp nhanh giống hệt như tệp bên ngoài ảnh chụp miễn là nội dung tệp vẫn giống hệt nhau. Số inode thường sẽ giữ nguyên.

Khi bạn thay đổi tệp, hãy đảm bảo rằng bạn đang ghi vào cùng một tệp và không xóa một tệp và ngay sau khi tạo một tệp khác có cùng tên.

Nếu bạn có hai tệp khác nhau (ảnh chụp nhanh và nguồn) có cùng ID thiết bị và cùng một nút nhưng nội dung khác nhau, hầu hết các ứng dụng sẽ tin rằng chúng giống nhau. Bạn sẽ phải tìm cách kiểm tra sự bình đẳng của tệp phụ thuộc vào công nghệ chụp nhanh hoặc nếu không thì kiểm tra nội dung của cả hai bên hoặc loại bỏ mục tiêu một cách có hệ thống.

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.