Phân bổ tài nguyên theo kiểu “thick” và “thin”: Sự khác biệt là gì?

Trong bài viết này, chúng ta sẽ đi sâu tìm hiểu về khía cạnh phân bổ trước dung lượng lưu trữ trong cài đặt đĩa ảo, đồng thời tìm hiểu xem “phân bổ dày” (thick provisioning) và “phân bổ mỏng” (thin provisioning) là gì, sự khác biệt giữa chúng ra sao, và loại phân bổ trước dung lượng lưu trữ nào phù hợp hơn với hạ tầng của bạn.

Dùng thử NAKIVO Backup & Replication

Dùng thử NAKIVO Backup & Replication

Đăng ký dùng thử miễn phí để khám phá toàn bộ các tính năng bảo vệ dữ liệu của giải pháp này. 15 ngày miễn phí. Không có bất kỳ giới hạn nào về tính năng hay dung lượng. Không cần thẻ tín dụng.

Phân bổ dày (Thick Provisioning)

Phân bổ dày là một hình thức phân bổ trước dung lượng lưu trữ. Với phương thức phân bổ dày, toàn bộ dung lượng lưu trữ của đĩa ảo sẽ được phân bổ trước trên thiết bị lưu trữ vật lý ngay khi đĩa ảo được tạo ra. Một đĩa ảo được phân bổ dày sẽ chiếm dụng toàn bộ không gian được phân bổ cho nó trong kho dữ liệu ngay từ đầu, do đó không gian này sẽ không thể được các máy ảo khác sử dụng.

Có hai loại đĩa ảo được phân bổ dày:

  • A Lazy zeroed disk là loại đĩa chiếm toàn bộ dung lượng ngay tại thời điểm tạo, nhưng không gian này có thể chứa một số dữ liệu cũ trên phương tiện lưu trữ vật lý. Dữ liệu cũ này không bị xóa hoặc ghi đè, do đó cần phải “xóa sạch” trước khi dữ liệu mới có thể được ghi vào các khối. Loại đĩa này có thể được tạo ra nhanh hơn, nhưng hiệu suất của nó sẽ thấp hơn trong các lần ghi đầu tiên do số IOPS (số thao tác nhập/xuất mỗi giây) tăng lên đối với các khối mới;
  • Một Eager zeroed disk là loại đĩa được phân bổ toàn bộ dung lượng cần thiết ngay tại thời điểm tạo ra, và không gian này được xóa sạch mọi dữ liệu trước đó trên phương tiện vật lý. Việc tạo đĩa được xóa ngay (eager zeroed) mất nhiều thời gian hơn, vì các số 0 được ghi vào toàn bộ đĩa, nhưng hiệu suất của chúng sẽ nhanh hơn trong các lần ghi đầu tiên. Loại đĩa ảo được phân bổ dày này hỗ trợ các tính năng cụm máy chủ, chẳng hạn như khả năng chịu lỗi.

Thick provisioning

Vì lý do bảo mật dữ liệu, việc xóa ngay (eager zeroing) phổ biến hơn so với xóa chậm (lazy zeroing) đối với các đĩa ảo được phân bổ dày. Tại sao? Khi bạn xóa một tệp VMDK, dữ liệu trên kho dữ liệu (datastore) không bị xóa hoàn toàn; các khối dữ liệu chỉ được đánh dấu là có sẵn, cho đến khi hệ điều hành ghi đè lên chúng. Nếu bạn tạo một đĩa ảo được xóa ngay lập tức trên kho dữ liệu này, khu vực đĩa sẽ được xóa hoàn toàn (tức là được ghi đầy số 0), từ đó ngăn chặn bất kỳ ai có ý đồ xấu khôi phục lại dữ liệu trước đó – ngay cả khi họ sử dụng phần mềm chuyên dụng của bên thứ ba.

Phân bổ mỏng (Thin Provisioning)

Phân bổ mỏng là một loại phân bổ trước dung lượng lưu trữ khác. Một đĩa ảo được phân bổ mỏng chỉ tiêu tốn dung lượng cần thiết ban đầu và sẽ mở rộng theo thời gian tùy theo nhu cầu.

Ví dụ: nếu bạn tạo một đĩa ảo 30GB được phân bổ mỏng mới và sao chép 10 GB tệp vào đó, kích thước của tệp VMDK kết quả sẽ là 10 GB, trong khi nếu bạn chọn sử dụng đĩa được phân bổ dày, bạn sẽ có một tệp VMDK 30GB.

Thin Provisioning

Đĩa ảo được phân bổ mỏng tạo nhanh và hữu ích để tiết kiệm không gian lưu trữ. Hiệu suất của đĩa được phân bổ mỏng không cao hơn so với đĩa được phân bổ dày với cơ chế ghi số 0 chậm, bởi vì đối với cả hai loại đĩa này, các số 0 đều phải được ghi vào trước khi ghi dữ liệu vào một khối mới. Lưu ý rằng khi bạn xóa dữ liệu khỏi đĩa ảo được phân bổ mỏng, kích thước đĩa sẽ không tự động giảm xuống. Điều này là do hệ điều hành chỉ xóa các mục chỉ mục trong bảng tệp (file table) trỏ đến phần thân tệp trong hệ thống tệp; hệ điều hành đánh dấu các khối từng thuộc về các tệp “đã xóa” là trống và có thể truy cập để ghi dữ liệu mới lên đó. Đây là lý do tại sao việc xóa tệp diễn ra gần như tức thì. Nếu đó là quá trình xóa hoàn toàn, trong đó các số 0 được ghi đè lên các khối mà các tệp đã xóa từng chiếm dụng, thì quá trình này sẽ mất khoảng thời gian tương đương với việc sao chép các tệp đó. Xem hình minh họa đơn giản dưới đây.

View from the operating system

Các vấn đề có thể xảy ra khi sử dụng đĩa ảo được phân bổ mỏng

Việc sử dụng đĩa ảo được phân bổ mỏng không phải lúc nào cũng suôn sẻ. Có một số vấn đề mà bạn nên lưu ý và chuẩn bị để xử lý.

Hãy xem xét một ví dụ khiến các máy ảo không thể sử dụng được. Ví dụ, chúng ta có một kho dữ liệu 20GB với ba máy ảo đang chạy trên đó. Mỗi máy ảo có một bộ đĩa ảo được phân bổ mỏng với kích thước tối đa là 10 GB. (Thực hành này được gọi là “phân bổ dư” – chúng ta gán cho các đĩa ảo dung lượng lớn hơn so với dung lượng vật lý mà chúng có thể chiếm dụng. Điều này thường được thực hiện vì nó cho phép bạn mở rộng hệ thống bằng cách thêm bộ nhớ vật lý khi cần thiết.) Kích thước tệp của mỗi đĩa ảo sẽ mở rộng khi dữ liệu được thêm vào, cho đến khi không còn dung lượng trống trên kho dữ liệu. Tình huống trở nên nghiêm trọng khi chỉ còn 1 GB dung lượng trống trên kho dữ liệu, chẳng hạn như khi VM1 chiếm 8 GB, VM2 chiếm 7 GB và VM3 chiếm 4 GB.

Các phương pháp xóa tệp thông thường trong máy ảo sẽ không giúp thu nhỏ các đĩa ảo được phân bổ mỏng. Nếu có hơn 1 GB dữ liệu mới được ghi vào bất kỳ máy ảo nào trong số này, cả ba máy ảo sẽ gặp sự cố, và bạn sẽ cần di chuyển một hoặc nhiều máy ảo sang một kho dữ liệu khác để khôi phục trạng thái hoạt động của chúng.

Cách giảm kích thước đĩa ảo được phân bổ mỏng sau khi xóa tệp

Để có thể giảm kích thước tệp VMDK của các đĩa ảo được phân bổ mỏng, bạn cần biết cách đặt các khối mà dữ liệu bạn đã xóa trước đó chiếm dụng về giá trị 0. Hãy cùng tìm hiểu cách thực hiện điều đó. Lưu ý: Các thao tác thu nhỏ đĩa chỉ có thể thực hiện được nếu máy ảo không chứa bản chụp nhanh (snapshot). Ngoài ra, xin hãy cẩn trọng và thực thi các lệnh dưới trách nhiệm của chính bạn. Luôn sao lưu toàn bộ dữ liệu quan trọng trước khi thực hiện bất kỳ thao tác nào liên quan đến đĩa.

Thu nhỏ đĩa VMware được phân bổ mỏng (Thin-Provisioned) trong Linux

Hãy xem xét một ví dụ: chúng ta có một tệp VMDK có dung lượng 10.266.496 KB (10GB) (chúng ta đã xác định kích thước này bằng cách truy cập vào thư mục trên datastore nơi máy ảo được lưu trữ) và muốn thu nhỏ đĩa ảo mà hệ điều hành Linux khách đang được cài đặt. Chúng ta có thể thử xóa các tệp không cần thiết trên đĩa ảo này. Tuy nhiên, Linux không tự động ghi giá trị 0 vào các khối sau khi xóa tệp; bạn sẽ phải tự thực hiện việc này. Bạn có thể thực hiện điều này bằng cách sử dụng công cụ ` dd ` (data duplicator) để sao chép và chuyển đổi dữ liệu. Công cụ này có sẵn trên tất cả các hệ thống Linux.

Lưu ý: Trước khi chạy công cụ ` dd `, cần đảm bảo datastore có đủ dung lượng để sử dụng (ví dụ: đối với máy chủ ESXi, bạn có thể kiểm tra dung lượng lưu trữ trong phần lưu trữ của vSphere Client – truy cập Configuration > Storage).

Hãy sử dụng tiện ích dd .

  1. Đầu tiên, chúng ta kiểm tra dung lượng trống trên máy ảo Linux khách bằng cách sử dụng lệnh df -h :

    root@test-virtual-machine:/# df -h

    Chúng ta nhận được kết quả sau trên giao diện điều khiển:

    Filesystem Size Used Avail Use% Mounted on
    udev 469M 0 469M 0% /dev
    tmpfs 99M 6,3M 92M 7% /run
    /dev/sda7 17G 8,8G 6,4G 58% /
    tmpfs 491M 116K 491M 1% /dev/shm
    tmpfs 5,0M 4,0K 5,0M 1% /run/lock
    tmpfs 491M 0 491M 0% /sys/fs/cgroup
    /dev/sda1 945M 121M 760M 14% /boot
    /dev/sda6 3,7G 13M 3,5G 1% /var/log
    tmpfs 99M 36K 99M 1% /run/user/1000

    Từ kết quả này, chúng ta có thể thấy rằng phân vùng / (root) chứa 8,8 GB tệp tin.

  2. Hãy xóa một vài gigabyte tệp không cần thiết trong phân vùng root. Đây là những gì chúng ta thấy trên giao diện dòng lệnh khi chạy lệnh df -h / :

    Filesystem Size Used Avail Use% Mounted on
    /dev/sda7 17G 4,7G 11G 31% /

    Như vậy, phân vùng root của chúng ta hiện chứa 4,7 GB tệp. Tuy nhiên, khi truy cập vào thư mục chứa tệp VMDK, chúng ta có thể thấy kích thước của nó vẫn là 10.266.496 KB (10 GB).

  3. Bây giờ chúng ta sẽ lấp đầy không gian trống bằng các số 0 (trong trường hợp của chúng ta, chúng ta sẽ lấp đầy 10 GB trong tổng số 11 GB có sẵn). Đầu tiên, chúng ta nhập cd kèm theo tên thư mục mà phân vùng cần được lấp đầy bằng số 0 được gắn vào (trong trường hợp của chúng ta là cd /, vì chúng ta muốn truy cập vào phân vùng gốc). Sau đó, chúng ta chạy lệnh sau đây, điều chỉnh các biến cho phù hợp với nhu cầu của mình:

    dd bs=1M count=10240 if=/dev/zero of=zero

    Trong lệnh này:

    • dd chỉ có thể được thực thi với quyền siêu người dùng.
    • bs đặt kích thước khối (ví dụ: bs=1M sẽ cho bạn kích thước khối là 1 megabyte).
    • count chỉ định số lượng khối cần sao chép (giá trị mặc định là dd sẽ tiếp tục chạy mãi mãi hoặc cho đến khi dữ liệu đầu vào cạn kiệt). Trong trường hợp của chúng ta, 10.240 MB là dung lượng trống mà chúng ta muốn lấp đầy bằng các số 0, do đó số khối 1 megabyte là 10240.
    •  if viết tắt của “tệp đầu vào”. Đây là nơi bạn cần chỉ định nguồn dữ liệu muốn sao chép. Trong trường hợp của chúng ta, đó là /dev/zero – một tệp đặc biệt (thiết bị ảo) cung cấp số lượng ký tự null tùy ý khi bạn đọc từ nó.
    • of viết tắt của “tệp đầu ra”. Đây là nơi bạn thiết lập đích đến để ghi/dán dữ liệu (trong trường hợp của chúng ta, tên tệp là zero).

    Sau khi thực thi lệnh trên, kích thước tệp VMDK của chúng ta sẽ tăng lên. Đây là kết quả hiển thị sau khi lệnh hoàn tất thành công:

    10240+0 records in
    10240+0 records out
    10737418240 bytes (10 GB) copied, 59,4348 s, 181 MB/s
    Command has been completed successfully.

    Vậy, hiện tại kích thước tệp VMDK của chúng ta là 11.321.856 KB (10,8 GB), có nghĩa là nó đã được mở rộng. Ngoài ra, nếu chúng ta chạy lại lệnh df -h / , chúng ta sẽ thấy kết quả như sau:

    Filesystem Size Used Avail Use% Mounted on
    /dev/sda7 17G 15G 569M 97% /

    Điều này có nghĩa là gần như toàn bộ phân vùng gốc (tức là 97%) đã bị chiếm dụng. Điều này là do chúng ta đã lấp đầy phần lớn không gian “trống” trước đó bằng các số 0. Bây giờ, đĩa ảo được phân bổ mỏng của chúng ta đã sẵn sàng để thu nhỏ.

Lưu ý: Để thực hiện việc thu nhỏ, cần phải cài đặt VMware Tools.

  1. Đối với các máy ảo đang chạy trên VMware ESXi hoặc VMware Workstation, chúng ta thực thi hai lệnh sau trong hệ điều hành khách Linux.a) Để đảm bảo phân vùng đĩa có sẵn, chúng ta chạy lệnh:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk list

    Đây là kết quả hiển thị trong trường hợp của chúng ta (tức là chúng ta thấy danh sách các phân vùng có sẵn):

    /
    /boot
    /var/log

    Phân vùng gốc đã có mặt, do đó chúng ta có thể tiếp tục.b) Để thu nhỏ phân vùng, chúng ta chạy lệnh sau:

    root@test-virtual-machine:/# vmware-toolbox-cmd disk shrink /

    Đây là kết quả chúng ta thấy trong trường hợp này:

    Please disregard any warnings about disk space for the duration of shrink process.
    Progress: 100 [===========>]
    Disk shrinking complete.

    Hiện tại, kích thước của tệp VMDK đã thu nhỏ là 5.323.456 KB (tức là 5,08 GB – nhỏ hơn nhiều so với 10,8 GB trước đó).

Lưu ý: Nếu máy ảo khách của bạn đang chạy trên máy chủ ESXi, sau khi điền các khối bằng số 0, bạn có thể thực hiện các bước sau:

  1. Tắt nguồn máy ảo hoặc ngắt kết nối đĩa ảo mà bạn muốn thu nhỏ.
  2. Kết nối với máy chủ ESXi bằng trình khách SSH.
  3. Truy cập vào Virtual Machine Folder.
  4. Kiểm tra mức sử dụng đĩa bằng du -h.
  5. Chạy lệnh vmkfstools -K test-virtual-machine.vmdk.
  6. Kiểm tra lại mức sử dụng đĩa bằng du -h .

Giảm dung lượng đĩa VMware được phân bổ mỏng trong Windows

Giống như Linux, Windows không tự động ghi 0 vào các khối sau khi xóa tệp. Để có thể ghi 0 vào không gian trống của các đĩa đích trên máy ảo Windows của bạn, bạn cần tải xuống SDelete – một tiện ích miễn phí từ bộ công cụ Sysinternals của Microsoft – và giải nén các tệp từ tệp lưu trữ đã tải xuống vào c:program filessdelete

Sau đó, thực hiện các bước sau:

  1. Chạy cmd
  2. Chuyển đến thư mục chứa tệp SDelete . Trong trường hợp của chúng tôi, đó là: cd c:program filessdelete

  3. Đối với mỗi phân vùng trong giao diện điều khiển, hãy sử dụng lệnh sdelete -z . Đây là những gì chúng tôi có trong trường hợp của mình:

    sdelete -z c:
    sdelete -z d:

    Các lệnh này sẽ làm trống mọi không gian trống trên đĩa được phân bổ mỏng của bạn bằng cách lấp đầy mọi không gian chưa sử dụng trên các phân vùng đã chỉ định. Chờ vài phút cho đến khi quá trình hoàn tất. Tệp VMDK của bạn sẽ mở rộng đến kích thước tối đa trong quá trình này.

  4. Đảm bảo VMware Tools đã được cài đặt trên máy ảo Windows của bạn. Theo mặc định, VMware Tools được cài đặt tại c:program filesvmwarevmware tools

    Truy cập vào thư mục này bằng cách nhập lệnh:

    cd c:program filesvmwarevmware tools

  5. Để xem các phân vùng đĩa có sẵn, hãy nhập lệnh:

    vmwaretoolboxcmd disk list

  6. Thu nhỏ các phân vùng đĩa cần thiết. Trong trường hợp của chúng ta, chúng ta đã chạy các lệnh:

    vmwaretoolboxcmd disk shrink c:
    vmwaretoolboxcmd disk shrink d:

    Chờ cho đến khi chương trình hoàn tất việc thu nhỏ đĩa.

Bạn có thể sử dụng phương pháp này cho các máy ảo đang chạy trên VMware ESXi hoặc VMware Workstation.

VMware Storage Distributed Resource Scheduler

Ở trên, chúng tôi đã đề cập đến một giải pháp để thu nhỏ đĩa được phân bổ mỏng theo cách thủ công. Tuy nhiên, còn có một cách nữa để quản lý các đĩa ảo của bạn (cả đĩa được phân bổ mỏng và đĩa được phân bổ dày), nếu bạn sử dụng cụm kho dữ liệu trong vSphere. VMware cung cấp tính năng di chuyển đĩa ảo tự động trong cụm datastore để tránh tình trạng tràn dung lượng lưu trữ trên các đĩa ảo được phân bổ mỏng và cân bằng tài nguyên I/O.

Nếu bạn có nhiều hơn một datastore chia sẻ được gắn vào máy chủ ESXi, bạn có thể thiết lập Trình lập lịch tài nguyên phân tán lưu trữ (Storage DRS). Storage DRS là một tính năng thông minh của vCenter Server, giúp quản lý hiệu quả các hệ thống lưu trữ VMFS và NFS, đồng thời cung cấp khả năng tự động bố trí và di chuyển đĩa của máy ảo. Bạn cũng có thể thiết lập Storage DRS sang chế độ thủ công nếu muốn phê duyệt các đề xuất di chuyển theo cách thủ công.

Thực hiện các bước sau để kích hoạt Storage DRS:

  1. Truy cập vào cụm kho dữ liệu (datastore cluster) trong vSphere Web Client.
  2. Truy cập vào vCenter > Datastore Clusters.
  3. Chọn cụm kho dữ liệu của bạn và nhấp vào Manage > Settings > Services > Storage DRS.
  4. Nhấp vào Edit.
  5. Cấu hình các thiết lập tự động hóa, chức năng liên quan đến I/O và các tùy chọn nâng cao mà bạn cần.datastore-cluster
  6. Nhấp vào OK để hoàn tất.

Nếu không có cụm datastore nào trong môi trường vSphere của bạn, hãy thực hiện các bước sau để tạo và thiết lập một cụm datastore mới:

  1. Truy cập vào vCenter > Datacenters trong vSphere Web Client.
  2. Nhấp chuột phải vào Datacenter của bạn và chọn New Datastore Cluster.
  3. Nhập tên cụm kho dữ liệu của bạn và đánh dấu vào ô bên cạnh "Turn On Storage DRS".
  4. Chọn các cài đặt tự động hóa, chức năng liên quan đến I/O và các tùy chọn nâng cao mà bạn cần.
  5. Nhấp vào OK để hoàn tất.

Kết luận

Trong bài viết này, chúng ta đã xem xét các loại đĩa ảo và đánh giá ưu nhược điểm của từng loại để hiểu rõ hơn về sự khác biệt giữa phân bổ dày (thick provisioning) và phân bổ mỏng (thin provisioning). Đĩa được cấp phát dày với phương thức xóa ngay (Eager zeroed) là lựa chọn tốt nhất về hiệu suất và bảo mật, nhưng yêu cầu đủ không gian lưu trữ trống và mất nhiều thời gian để tạo. Đĩa được cấp phát dày với phương thức xóa chậm (Lazy zeroed) có thời gian tạo ngắn, nhưng không cung cấp tốc độ cao như đĩa được cấp phát dày với phương thức xóa ngay và kém an toàn hơn. Đĩa được cấp phát mỏng là lựa chọn tốt nhất để tiết kiệm không gian kho dữ liệu ngay tại thời điểm tạo đĩa.

Bạn có thể tạo một đĩa ảo có kích thước tối đa lớn hơn dung lượng vật lý hiện có (“overprovisioning”) và bổ sung thêm dung lượng lưu trữ vật lý trong tương lai, nhưng hãy nhớ rằng nếu dung lượng đĩa vật lý bị lấp đầy và đĩa được phân bổ mỏng không thể mở rộng để chứa thêm dữ liệu, các máy ảo của bạn sẽ không thể sử dụng được – vì vậy đừng quên theo dõi lượng dung lượng trống. Chúng tôi cũng đã trình bày các phương pháp thu nhỏ đĩa ảo VMware được phân bổ mỏng, trong trường hợp bạn không muốn thêm dung lượng lưu trữ và cần giảm dung lượng đang chiếm dụng.

NAKIVO cho sao lưu VMware vSphere

NAKIVO cho sao lưu VMware vSphere

Bảo vệ dữ liệu toàn diện cho các máy ảo VMware vSphere cùng các tùy chọn khôi phục tức thì. Các đích sao lưu an toàn tại chỗ, ngoài cơ sở và trên đám mây. Các tính năng chống ransomware.

Có thể bạn cũng quan tâm