zfs đổi tên / di chuyển hệ thống tập tin gốc vào con


9

Câu hỏi tương tự tồn tại nhưng giải pháp (sử dụng mv) là khủng khiếp vì trong trường hợp này, nó hoạt động như "sao chép, sau đó loại bỏ" chứ không phải là "di chuyển" thuần túy.

Vì vậy, tôi đã tạo ra một nhóm:

zpool create tank /dev/loop0

và lấy dữ liệu của tôi từ một bộ lưu trữ khác trong đó để dữ liệu của tôi hiện đang ở /tank.

zfs list
NAME      USED  AVAIL  REFER  MOUNTPOINT
tank      591G  2.10T   591G  /tank

Bây giờ tôi đã nhận ra rằng tôi cần dữ liệu của mình ở trong một hệ thống tệp con chứ không phải trong /tankhệ thống tệp trực tiếp.

Vậy làm thế nào để tôi di chuyển hoặc đổi tên hệ thống tập tin gốc hiện có để nó trở thành một đứa trẻ trong nhóm?

Đổi tên đơn giản sẽ không hoạt động:

zfs rename tank tank/mydata
cannot rename to 'tank/mydata': datasets must be within same pool

(Btw, tại sao nó phàn nàn các bộ dữ liệu không nằm trong cùng một nhóm khi thực tế tôi chỉ có một nhóm?)

Tôi biết có những giải pháp liên quan đến việc sao chép tất cả dữ liệu ( mvhoặc gửi toàn bộ dữ liệu đến một thiết bị khác và quay lại), nhưng không nên có một cách đơn giản thanh lịch?

Chỉ cần lưu ý rằng tôi không quan tâm đến ảnh chụp nhanh ở giai đoạn này (chưa có gì để quan tâm).

Câu trả lời:


4

(xem ghi chú trong các bình luận, điều này hoạt động, nhưng bạn sẽ không bao giờ có thể xóa ảnh chụp ban đầu, vì vậy đó không phải là một giải pháp tốt)

Với ZFS, điều này thật đáng ngạc nhiên: chỉ cần chụp nhanh, sao chép và sau đó rm. Không có thêm không gian hoặc thời gian sao chép cần thiết.

zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*

Cảnh giác khi chạy rm -rf nếu bạn không thay đổi điểm gắn kết nếu bạn có các hệ thống tệp khác trong zpool của mình. Bạn không muốn xóa đệ quy nội dung của hệ thống tệp mới (/ tank / newname) hoặc bất kỳ hệ thống tệp con nào khác (tank / *). Khi bạn đã xác nhận các tệp của mình không nằm trong fs gốc (/ tank /) và chỉ trong hệ thống tệp mới của bạn, bạn cũng có thể xóa ảnh chụp nhanh ban đầu đó.

zfs delete tank@mydata

Có vẻ như một câu trả lời hợp lý (tôi không thể nghĩ ra bất kỳ cách nào khác để lấy dữ liệu vào bộ dữ liệu mới mà không di chuyển nó) nhưng thật không may, bạn không thể xóa ảnh chụp nhanh ban đầu này. Bản sao có một vài tác dụng phụ khó xử. Bạn không thể xóa tank @ mydata vì tập dữ liệu mới phụ thuộc vào nó. Bạn có thể quảng cáo bộ dữ liệu mới, sẽ chuyển tank @ mydata sang tank / newname @ mydata, nhưng bây giờ bạn đã trao đổi phụ thuộc xung quanh và bạn nhận được lỗi 'dữ liệu đã tồn tại' nếu bạn thử và xóa bộ dữ liệu mới (Ít nhất là trên FreeBSD, mặc dù tôi cho rằng đây có thể là ZFS cụ thể chứ không phải HĐH).
USD Matt

@USDMatt: Bạn hoàn toàn đúng. Điều này hoạt động hoàn hảo nếu bạn đang làm việc với các hệ thống con (tank / a -> tank / a @ snap -> tank / asnap-clone -> tank / đổi tên-asnap-clone) nhưng không hoạt động nếu bạn đang làm việc ở phần gốc của zpool. Cảm thấy giống như một lỗi, đánh phấn nó như một lý do khác để không bao giờ lấp đầy hệ thống tập tin gốc của nhóm của bạn).
báo

4

Với vấn đề được ghi nhận bởi @USDMatt, gửi / nhận ZFS có lẽ là cách tốt nhất để đi.

zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap

Cảnh giác khi chạy rm -rf nếu bạn không thay đổi điểm gắn kết nếu bạn có các hệ thống tệp khác trong zpool tank của mình. Bạn không muốn xóa đệ quy nội dung của hệ thống tệp mới (/ tank / newname) hoặc bất kỳ hệ thống tệp con nào khác (/ tank / *).


0

Tôi không nghĩ có một cách thanh lịch đơn giản ... mặc dù bạn chỉ có thể thay đổi điểm gắn kết của mình ...

mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>

Hoặc có thể đổi tên xe tăng và sau đó gắn nó vào nơi bạn cần ...

Hoặc là hoặc tạo một hệ thống tập tin ở đúng nơi và cp, mv hoặc zfs gửi / nhận ...

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.