OrbStack là giải pháp thay thế Docker Desktop tối ưu cho macOS (đặc biệt Apple Silicon như M4), mang lại hiệu suất cao và tích hợp sâu với hệ thống. Tuy nhiên, toàn bộ dữ liệu Docker và Linux machines được lưu trong một file sparse có tên data.img.raw (kích thước apparent lên đến 8TB, nhưng thực tế chỉ chiếm dung lượng bạn đang dùng).
File này nằm tại:~/Library/Group Containers/HUAQ24HBR6.dev.orbstack/data/data.img.raw
Trong khi đó, thư mục ~/OrbStack chỉ là view ảo (mount point) – không chiếm bất kỳ dung lượng nào trên đĩa. Đây là lý do nhiều người nhầm lẫn và nghĩ rằng dữ liệu chỉ nằm ở ~/OrbStack.
Vì Mac Mini M4 bản base có giá khá tốt, nên nhiều người (trong đó có mình) chọn dùng làm home server để self-hosted các ứng dụng open-source. Vì là bản base nên dung lượng ổ cứng của nó chỉ là 256GB, rất nhanh đầy khi mà còn chưa dùng hết được 16GB RAM. Bài viết này sẽ hướng dẫn bạn chuyển toàn bộ dữ liệu sang external drive (ổ cứng ngoài / enclosure) một cách an toàn, giữ nguyên 100% container, image, volume và Linux machine, sau đó xóa bản cũ để giải phóng internal SSD.

Lưu ý trước khi làm
- External drive phải luôn cắm khi OrbStack đang chạy. Nếu tháo ra giữa chừng → OrbStack sẽ không khởi động được hoặc có nguy cơ hỏng dữ liệu.
- Khuyến nghị mạnh mẽ: Dùng SSD NVMe + enclosure Thunderbolt 4 / USB4 (hoặc USB-C tốt). Dùng HDD hoặc USB 3.0 cũ sẽ làm giảm đáng kể hiệu suất container.
- Format external thành APFS (khuyến nghị Case-insensitive).
- Backup trước nếu có dữ liệu quan trọng (dù quy trình copy là an toàn).
- OrbStack không hỗ trợ migrate tự động. Khi bạn đổi Data location trong Settings, nó sẽ tạo dữ liệu mới trống. Bạn phải copy thủ công trước.
- Quá trình copy có thể mất nhiều giờ nếu bạn có hàng trăm GB dữ liệu. Chuẩn bị thời gian và không tắt máy giữa chừng.
Chuẩn bị
- Mac đang chạy macOS (Apple Silicon hoặc Intel)
- OrbStack đã cài đặt và đang có dữ liệu (container, volume, machine)
- Một external drive đã format APFS, dung lượng trống đủ lớn
- Kết nối internet (chỉ để tải script, sau đó có thể ngắt)
Hướng dẫn chi tiết từng bước
Bước 1: Dừng OrbStack hoàn toàn
Mở Terminal và chạy:
orb status- Nếu hiện running → Quit OrbStack hoàn toàn:
- Nhấn
Command + Qhoặc chuột phải icon OrbStack trên menu bar → Quit OrbStack. - Chờ 10–20 giây, chạy lại lệnh
orb status→ phải hiện stopped.
Lưu ý: Đừng chỉ đóng cửa sổ app. Phải Quit hoàn toàn để file
data.img.rawkhông bị lock.
Bước 2: Tải và chuẩn bị script sparse_copy.py
Vì data.img.raw là sparse file, bạn không thể copy bằng Finder hoặc cp thông thường (sẽ rất chậm hoặc sai). Phải dùng script chuyên biệt.

data.img.raw của OrbStack)- Mở trình duyệt và truy cập:
https://github.com/orbstack/orbstack/issues/2354 / hoặc tải trực tiếp ở đây sparse_copy.py - Kéo xuống gần cuối issue (comment của user
wizardcoder). - Tìm và nhấn vào file đính kèm
sparse_copy.pyđể tải về (thường lưu tại~/Downloads/sparse_copy.py). - Trong Terminal, di chuyển và cấp quyền thực thi:
mv ~/Downloads/sparse_copy.py ~/sparse_copy.py
chmod +x ~/sparse_copy.py
ls -l ~/sparse_copy.pyBạn sẽ thấy quyền -rwxr-xr-x (có chữ x).
Bước 3: Kiểm tra đường dẫn thực tế của data.img.raw
Chạy lệnh sau để xác nhận vị trí chính xác:
ls -lh ~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/Kết quả mong đợi: Bạn sẽ thấy file data.img.raw (kích thước thực tế, ví dụ: 180GiB).
Bước 4: Tạo thư mục đích trên External Drive
Giả sử external của bạn mount tại /Volumes/Tên-Ổ-Của-Bạn (thay bằng tên thực tế, ví dụ /Volumes/vnROM).
mkdir -p /Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/dataBước 5: Copy file data.img.raw Bằng sparse_copy.py
Chạy lệnh sau (thay đường dẫn cho đúng):
~/sparse_copy.py \
~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/data.img.raw \
/Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data/data.img.raw
Giải thích:
- Script sẽ copy chỉ phần dữ liệu thực sự (dùng SEEK_HOLE/SEEK_DATA), giữ nguyên sparse layout.
DESTkhông được tồn tại sẵn – nếu script báo lỗi “must not exist”, hãy xóa file đích cũ.
Thời gian: Có thể mất 30 phút đến vài giờ tùy dung lượng thực tế.
Bước 6: Copy các file nhỏ còn lại
Sau khi script chạy xong:
cp -R ~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/swap.img /Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data/swap.img
cp -R ~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/README.txt /Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data/README.txt
Bước 7: Kiểm tra tính toàn vẹn (Bắt buộc)
Chạy lệnh sau để so sánh hash:
shasum -a 256 \
~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/data.img.raw \
/Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data/data.img.raw
Thời gian sẽ rất lâu nên cố gắng đợi nhé.
Kết quả mong đợi: Hai dòng hash giống hệt nhau 100%.
Nếu khác nhau → copy bị lỗi, cần làm lại Bước 5–6.
Bước 8: Thay đổi Data Location trong OrbStack
- Mở lại OrbStack app.
- Vào Settings (bánh răng ⚙️ hoặc menu OrbStack → Settings).
- Tìm phần Storage.
- Tìm Data location (hoặc “Storage location” / “Change data directory”).
- Chọn đường dẫn mới:
/Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data- Lưu setting.
Bước 9: Khởi động lại và kiểm tra dữ liệu
orb restart
orb statusKiểm tra dữ liệu còn nguyên:
docker ps -a # Xem containers
docker volume ls # Xem volumes
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" # Xem images
orb list # Xem Linux machines (nếu có)Mở app OrbStack → kiểm tra danh sách containers, volumes, machines có đầy đủ không.
Mở ~/OrbStack trong Finder để kiểm tra view ảo vẫn hoạt động bình thường.
Bước 10: Xóa dữ liệu cũ (Chỉ làm khi đã xác nhận 100% OK)
rm -rf ~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstackKhuyến nghị: Đổi tên thư mục cũ thành
data_old_backuptrước khi xóa vĩnh viễn, đề phòng cần khôi phục.
So sánh khi dùng Internal SSD vs External SSD cho OrbStack
| Tiêu chí | Internal SSD (Trước khi chuyển) | External SSD Thunderbolt 4 (Sau khi chuyển) | Đánh giá |
|---|---|---|---|
| Tốc độ đọc/ghi thực tế | ~2800–3000 MB/s | ~2600–2900 MB/s (rất gần) | Gần như không khác biệt |
| Dung lượng trống Internal | Thấp (thường chỉ còn < 50GB) | Cao (giải phóng 150–400GB+) | Rất tốt |
| Dễ dàng backup & di chuyển | Khó (phải copy file sparse 8TB) | Rất dễ (chỉ cần cắm external sang máy mới) | Ưu điểm lớn |
| Rủi ro khi tháo ổ | Không có | Phải luôn cắm (nếu tháo → OrbStack lỗi) | Cần lưu ý |
| Chi phí đầu tư | Đã có sẵn | Thêm 2–6 triệu (enclosure + SSD) | Đáng giá dài hạn |
| Hiệu suất container | Tối ưu | Gần như tối ưu (nếu dùng enclosure tốt) | Chấp nhận được |
| Backup Time Machine | Phức tạp (sparse file) | Dễ dàng hơn | Tốt hơn |
Xử lý lỗi thường gặp
Lỗi 1: FileNotFoundError: No such file or directory: '.../data_bk/data.img.raw'
Nguyên nhân: Bạn đang trỏ script vào thư mục data_bk nhưng thư mục/file không tồn tại (hoặc bạn chưa tạo backup đúng cách).
Giải pháp:
- Chạy lại lệnh kiểm tra:
ls -lh ~/Library/Group\ Containers/HUAQ24HBR6.dev.orbstack/data/- Dùng đường dẫn gốc (
/data/data.img.raw) thay vìdata_bk. - Nếu bạn muốn backup trước, hãy copy toàn bộ thư mục
datasangdata_bktrước, sau đó mới chạy script từdata_bk.
Lỗi 2: Script báo “DEST must not exist”
Giải pháp: Xóa file đích cũ trên external:
rm /Volumes/Tên-Ổ-Của-Bạn/OrbStack-Data/HUAQ24HBR6.dev.orbstack/data/data.img.rawSau đó chạy lại script.
Lỗi 3: Sau khi đổi location, dữ liệu bị trống
Nguyên nhân: Đường dẫn Data location chưa đúng cấu trúc.
Giải pháp: Thử các biến thể:
/Volumes/.../HUAQ24HBR6.dev.orbstack/Volumes/.../HUAQ24HBR6.dev.orbstack/data
Khởi động lại OrbStack sau mỗi lần thử.
Lỗi 4: OrbStack không khởi động sau khi chuyển
- Kiểm tra external đã cắm và mount chưa.
- Kiểm tra quyền đọc/ghi trên external.
- Chạy
orb statusđể xem lỗi chi tiết.
FAQ – Những câu hỏi thường gặp
1. Có mất dữ liệu khi chuyển không?
Không. Quy trình sử dụng sparse_copy.py + cp -R + kiểm tra hash SHA256 đảm bảo dữ liệu 100% nguyên vẹn. Chỉ cần làm đúng theo hướng dẫn và xác nhận hash giống nhau trước khi xóa bản cũ.
2. Hiệu suất container có giảm nhiều không?
Gần như không. Nếu dùng enclosure Thunderbolt 4 + SSD NVMe tốt, tốc độ chỉ giảm 5–10% so với internal. Hầu hết người dùng không cảm nhận được sự khác biệt khi chạy Docker/OrbStack.
3. Tôi có thể dùng HDD thay vì SSD không?
Không khuyến khích. HDD sẽ làm chậm đáng kể (đặc biệt khi build image hoặc chạy database). Chỉ dùng nếu bạn chấp nhận hiệu suất thấp và chỉ để backup dài hạn.
4. Sau khi chuyển, có cần sửa docker-compose hoặc script nào không?
Không cần. Tất cả bind mount, volume, image, container đều hoạt động bình thường vì OrbStack chỉ thay đổi vị trí lưu trữ vật lý, không thay đổi cấu trúc bên trong.
5. Làm sao để khôi phục nếu external drive hỏng?
Bạn vẫn còn bản backup data_old_backup trên internal (nếu chưa xóa). Chỉ cần đổi lại Data location về đường dẫn cũ là xong. Nên backup định kỳ data.img.raw bằng Time Machine hoặc rsync.
6. OrbStack có hỗ trợ nhiều external drive cùng lúc không?
Hiện tại chỉ hỗ trợ một Data location duy nhất. Bạn có thể dùng external cho data chính và internal cho một số volume nhỏ nếu muốn.
7. Phiên bản OrbStack nào hỗ trợ tốt nhất tính năng này?
Tất cả phiên bản từ 1.0 trở lên đều hỗ trợ thay đổi Data location. Phiên bản mới nhất (2026) có cải thiện tốt hơn về sparse file handling.
Sau khi hoàn tất, bạn đã:
- Giải phóng hàng trăm GB dung lượng internal SSD.
- Giữ nguyên 100% dữ liệu (container, volume, image, Linux machine).
- Vẫn sử dụng OrbStack bình thường với hiệu suất gần như ban đầu (nếu dùng SSD nhanh).
Lợi ích lâu dài:
- Dễ dàng backup toàn bộ
data.img(vì nó nằm trên external). - Dễ dàng di chuyển sang máy mới (chỉ cần cắm external).
- Giảm áp lực lên internal SSD (đặc biệt quan trọng trên Mac Mini M4 có dung lượng hạn chế).








