Hướng dẫn di chuyển PostgreSQL trên Ubuntu 20.04 một cách hiệu quả

PostgreSQL, hay còn gọi là Postgres, là một hệ quản trị cơ sở dữ liệu quan hệ đối tượng mã nguồn mở mạnh mẽ và đáng tin cậy. Tuy nhiên, khi làm việc với PostgreSQL trên Ubuntu, có một vấn đề mà nhiều nhà phát triển và quản trị viên hệ thống thường gặp phải: vị trí lưu trữ dữ liệu mặc định. Việc quản lý không gian lưu trữ cho cơ sở dữ liệu là một yếu tố cực kỳ quan trọng để đảm bảo hiệu suất và sự ổn định của hệ thống. Mặc định, Ubuntu lưu trữ toàn bộ dữ liệu của PostgreSQL trong thư mục hệ thống, thường là trên cùng phân vùng với hệ điều hành. Điều này có thể dẫn đến nhiều hạn chế, đặc biệt là khi cơ sở dữ liệu của bạn phát triển lớn mạnh theo thời gian. Bạn sẽ đối mặt với nguy cơ hết dung lượng ổ đĩa, làm ảnh hưởng đến không chỉ PostgreSQL mà còn toàn bộ hệ thống. Do đó, việc di chuyển thư mục dữ liệu sang một vị trí mới, chẳng hạn như một ổ đĩa riêng hoặc một phân vùng lớn hơn, là một giải pháp tối ưu. Bài viết này sẽ hướng dẫn bạn từng bước cách thay đổi vị trí thư mục dữ liệu PostgreSQL trên Ubuntu 20.04 một cách an toàn và hiệu quả, từ khâu chuẩn bị, di chuyển, cấu hình cho đến xử lý các sự cố thường gặp.

Giới thiệu về vị trí thư mục dữ liệu của PostgreSQL

Nếu bạn là người mới bắt đầu với PostgreSQL, có thể bạn sẽ tự hỏi dữ liệu của mình thực sự được lưu ở đâu. Trên hệ điều hành Ubuntu, thư mục dữ liệu mặc định thường nằm tại /var/lib/postgresql/[phiên bản]/main. Ví dụ, với PostgreSQL phiên bản 12, đường dẫn sẽ là /var/lib/postgresql/12/main. Đây là nơi chứa tất cả mọi thứ liên quan đến cơ sở dữ liệu của bạn: các bảng, chỉ mục, view, và cả các file cấu hình quan trọng. PostgreSQL sử dụng một tài khoản người dùng hệ thống riêng biệt tên là postgres để quản lý và truy cập thư mục này. Điều này đảm bảo rằng chỉ có tiến trình của PostgreSQL mới có quyền đọc và ghi dữ liệu, một cơ chế bảo mật quan trọng.

Hình minh họa

Vấn đề chính nảy sinh khi phân vùng gốc (/), nơi chứa thư mục /var, thường có dung lượng hạn chế. Nó phải chia sẻ không gian với hệ điều hành, các ứng dụng khác và file log hệ thống. Khi cơ sở dữ liệu của bạn lớn dần, phân vùng này sẽ nhanh chóng bị lấp đầy, gây ra tình trạng “disk full” và có thể làm sập toàn bộ dịch vụ. Hiểu rõ cấu trúc và vị trí mặc định này là bước đầu tiên để nhận ra sự cần thiết của việc di chuyển nó sang một nơi hợp lý hơn. Trong bài viết này, chúng ta sẽ đi sâu vào cách thực hiện điều đó một cách an toàn, đảm bảo dữ liệu của bạn được bảo toàn và hệ thống hoạt động ổn định trở lại với một không gian lưu trữ mới rộng rãi và hiệu quả hơn.

Lý do cần thay đổi vị trí thư mục lưu trữ dữ liệu PostgreSQL

Việc giữ nguyên vị trí mặc định cho thư mục dữ liệu PostgreSQL có vẻ tiện lợi lúc ban đầu, nhưng nó tiềm ẩn nhiều rủi ro và hạn chế khi hệ thống của bạn phát triển. Hiểu rõ những lý do này sẽ giúp bạn đưa ra quyết định đúng đắn về việc tối ưu hóa hạ tầng cơ sở dữ liệu của mình.

Hạn chế của vị trí mặc định

Vị trí mặc định trong /var/lib/postgresql thường nằm trên phân vùng hệ thống (root partition). Đây là một vấn đề lớn vì nhiều lý do. Đầu tiên và rõ ràng nhất là giới hạn về dung lượng. Phân vùng hệ thống thường không được cấp phát nhiều không gian, vì nó được thiết kế chủ yếu để chứa hệ điều hành và các phần mềm cốt lõi. Khi cơ sở dữ liệu của bạn phình to, nó sẽ cạnh tranh trực tiếp dung lượng với các file log, các gói cập nhật hệ thống và các ứng dụng khác. Điều này không chỉ làm PostgreSQL ngừng hoạt động khi hết dung lượng mà còn có thể khiến toàn bộ máy chủ của bạn bị treo.

Hình minh họa

Thứ hai là vấn đề về hiệu suất. Phân vùng hệ thống thường là nơi diễn ra nhiều hoạt động đọc/ghi (I/O) từ các tiến trình khác nhau. Việc đặt cơ sở dữ liệu, vốn yêu cầu I/O rất cao, trên cùng một ổ đĩa với hệ điều hành sẽ tạo ra tình trạng “nghẽn cổ chai”. Hiệu suất truy vấn và ghi dữ liệu sẽ bị suy giảm đáng kể, ảnh hưởng trực tiếp đến trải nghiệm người dùng cuối. Hơn nữa, việc quản lý và sao lưu cũng trở nên phức tạp hơn khi dữ liệu quan trọng bị trộn lẫn với các file hệ thống.

Lợi ích khi sử dụng thư mục dữ liệu mới

Di chuyển thư mục dữ liệu sang một phân vùng hoặc ổ đĩa riêng biệt mang lại nhiều lợi ích vượt trội. Lợi ích rõ rệt nhất là tối ưu hiệu suất truy xuất dữ liệu. Khi cơ sở dữ liệu nằm trên một ổ đĩa vật lý riêng, đặc biệt là các ổ SSD hoặc NVMe tốc độ cao, nó sẽ không còn phải tranh chấp tài nguyên I/O với hệ điều hành. Điều này giúp giảm độ trễ và tăng tốc độ xử lý các giao dịch một cách đáng kể.

Quản lý dung lượng cũng trở nên dễ dàng hơn rất nhiều. Bạn có thể dành riêng một phân vùng lớn chỉ cho PostgreSQL, giúp việc theo dõi và mở rộng không gian lưu trữ trở nên đơn giản. Bạn không còn phải lo lắng về việc cơ sở dữ liệu phát triển sẽ ảnh hưởng đến sự ổn định của hệ điều hành. Cuối cùng, việc tách biệt dữ liệu giúp tăng cường khả năng bảo mật và sao lưu. Bạn có thể dễ dàng thiết lập các chính sách backup riêng cho phân vùng dữ liệu, chẳng hạn như tạo các bản snapshot định kỳ mà không ảnh hưởng đến phần còn lại của hệ thống. Điều này cũng tạo ra một lớp bảo vệ, ngăn chặn các sự cố từ hệ điều hành lan sang làm hỏng dữ liệu của bạn.

Các bước chuẩn bị thư mục mới trên Ubuntu 20.04

Trước khi tiến hành di chuyển bất kỳ dữ liệu nào, khâu chuẩn bị là cực kỳ quan trọng để đảm bảo quá trình diễn ra suôn sẻ và không gặp lỗi. Chúng ta cần tạo một “ngôi nhà” mới cho dữ liệu PostgreSQL và chắc chắn rằng nó có đủ không gian và quyền truy cập phù hợp.

Kiểm tra phân vùng và tạo thư mục mới

Bước đầu tiên là xác định vị trí bạn muốn chuyển dữ liệu đến. Đó có thể là một phân vùng khác trên cùng ổ đĩa hoặc một ổ đĩa vật lý hoàn toàn mới đã được gắn vào hệ thống. Để xem danh sách các phân vùng và dung lượng trống của chúng, hãy sử dụng lệnh df -h. Lệnh này sẽ hiển thị thông tin một cách dễ đọc (-h là viết tắt của human-readable).

df -h

Kết quả sẽ trông giống như thế này:

Filesystem Size Used Avail Use% Mounted on
/dev/sda1 50G 20G 30G 40% /
/dev/sdb1 200G 1.0G 199G 1% /mnt/data

Hình minh họa

Trong ví dụ trên, chúng ta thấy phân vùng /dev/sdb1 được gắn tại /mnt/data và có rất nhiều dung lượng trống. Đây là một ứng cử viên lý tưởng. Sau khi đã chọn được vị trí, chúng ta sẽ tạo một thư mục con bên trong nó để chứa dữ liệu PostgreSQL. Ví dụ, chúng ta sẽ tạo thư mục postgresql trong /mnt/data.

Sử dụng lệnh mkdir để tạo thư mục mới. Tùy chọn -p đảm bảo rằng các thư mục cha cũng sẽ được tạo nếu chúng chưa tồn tại.

sudo mkdir -p /mnt/data/postgresql

Bây giờ, bạn đã có một thư mục trống sẵn sàng để trở thành nơi ở mới cho cơ sở dữ liệu của mình.

Phân quyền và bảo mật thư mục

Đây là bước cực kỳ quan trọng và thường là nguyên nhân gây ra lỗi nếu thực hiện không chính xác. Dịch vụ PostgreSQL trên Ubuntu chạy dưới một người dùng hệ thống đặc biệt có tên là postgres. Do đó, người dùng này phải có toàn quyền sở hữu và kiểm soát thư mục dữ liệu mới. Nếu không, PostgreSQL sẽ không thể đọc, ghi hay khởi động.

Hình minh họa

Đầu tiên, chúng ta cần thay đổi quyền sở hữu của thư mục vừa tạo cho người dùng và nhóm postgres. Sử dụng lệnh chown với tùy chọn -R (recursive) để áp dụng cho cả thư mục và các tệp con sẽ được sao chép vào sau này.

sudo chown -R postgres:postgres /mnt/data/postgresql

Tiếp theo, chúng ta cần thiết lập quyền truy cập chính xác cho thư mục. Một cấu hình bảo mật tốt là chỉ cho phép chủ sở hữu (user postgres) có toàn quyền (đọc, ghi, thực thi), trong khi nhóm (group postgres) chỉ có quyền đọc và thực thi, và không cho phép những người dùng khác truy cập. Quyền này tương ứng với mã 750.

sudo chmod 750 /mnt/data/postgresql

Cuối cùng, hãy kiểm tra lại để chắc chắn rằng mọi thứ đã được thiết lập đúng. Sử dụng lệnh ls -ld để xem thông tin chi tiết về quyền của thư mục:

ls -ld /mnt/data/postgresql

Kết quả trả về phải hiển thị rằng chủ sở hữu là postgres, nhóm là postgres, và quyền truy cập là drwxr-x---. Nếu tất cả đều chính xác, bạn đã hoàn tất khâu chuẩn bị và sẵn sàng cho bước tiếp theo.

Quy trình di chuyển thư mục dữ liệu PostgreSQL

Sau khi đã chuẩn bị kỹ lưỡng “ngôi nhà” mới, bây giờ là lúc thực hiện cuộc “di cư” dữ liệu. Quy trình này đòi hỏi sự cẩn thận và phải được thực hiện theo đúng thứ tự để đảm bảo tính toàn vẹn của dữ liệu và sự hoạt động ổn định của hệ thống sau khi hoàn tất.

Dừng dịch vụ PostgreSQL an toàn

Đây là bước quan trọng nhất và không thể bỏ qua. Bạn tuyệt đối không được di chuyển dữ liệu trong khi PostgreSQL đang chạy. Làm như vậy gần như chắc chắn sẽ dẫn đến hỏng dữ liệu (data corruption) vì các file đang được ghi hoặc đọc dở dang. Chúng ta cần dừng dịch vụ một cách an toàn.

Sử dụng lệnh systemctl để dừng dịch vụ PostgreSQL:

sudo systemctl stop postgresql

Sau khi chạy lệnh, bạn nên kiểm tra lại trạng thái của dịch vụ để đảm bảo nó đã dừng hoàn toàn. Sử dụng lệnh sau:

sudo systemctl status postgresql

Hình minh họa

Kết quả trả về nên chứa dòng chữ Active: inactive (dead). Điều này xác nhận rằng PostgreSQL đã ngừng hoạt động và bạn có thể an toàn tiến hành các bước tiếp theo.

Di chuyển dữ liệu sang thư mục mới

Bây giờ, chúng ta sẽ sao chép toàn bộ nội dung từ thư mục dữ liệu cũ sang thư mục mới đã chuẩn bị. Công cụ được khuyến khích sử dụng cho việc này là rsync vì nó có khả năng giữ nguyên tất cả các thuộc tính của tệp như quyền sở hữu, quyền truy cập và dấu thời gian.

Giả sử thư mục cũ của bạn là /var/lib/postgresql/12/main và thư mục mới là /mnt/data/postgresql. Lệnh sẽ như sau:

sudo rsync -av /var/lib/postgresql/12/main/ /mnt/data/postgresql/

Lưu ý dấu gạch chéo / ở cuối đường dẫn nguồn. Nó chỉ định rằng bạn muốn sao chép nội dung của thư mục main, chứ không phải bản thân thư mục main. Các tùy chọn -a (archive mode) giúp bảo toàn mọi thứ và -v (verbose) hiển thị tiến trình sao chép.

Sau khi rsync hoàn tất, bạn nên xác nhận lại bằng cách so sánh kích thước của hai thư mục để chắc chắn rằng không có dữ liệu nào bị thiếu:

sudo du -sh /var/lib/postgresql/12/main/
sudo du -sh /mnt/data/postgresql/

Kích thước hiển thị của cả hai phải giống hệt nhau.

Cấu hình PostgreSQL sử dụng thư mục dữ liệu mới

Khi dữ liệu đã nằm an toàn ở vị trí mới, chúng ta cần “chỉ đường” cho PostgreSQL biết nơi để tìm chúng. Điều này được thực hiện bằng cách chỉnh sửa tệp cấu hình chính của PostgreSQL.

Trước tiên, hãy tạo một bản sao lưu của tệp cấu hình để phòng trường hợp có sự cố:

sudo cp /etc/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/postgresql.conf.bak

Bây giờ, mở tệp cấu hình bằng một trình soạn thảo văn bản như nano:

sudo nano /etc/postgresql/12/main/postgresql.conf

Tìm đến dòng có chứa tham số data_directory. Mặc định, nó sẽ bị vô hiệu hóa (có dấu # ở đầu) hoặc trỏ đến đường dẫn cũ. Bạn cần thay đổi nó để trỏ đến vị trí mới.

Hình minh họa

Tìm dòng này (có thể trông hơi khác một chút):

# data_directory = '/var/lib/postgresql/12/main'

Và thay đổi nó thành:

data_directory = '/mnt/data/postgresql'

Hãy chắc chắn rằng bạn đã xóa dấu # ở đầu dòng và đường dẫn được đặt trong dấu nháy đơn. Sau đó, lưu và đóng tệp.

Khởi động lại dịch vụ và kiểm tra hoạt động

Mọi thứ đã sẵn sàng. Bây giờ là lúc khởi động lại dịch vụ PostgreSQL và xem kết quả.

sudo systemctl start postgresql

Ngay sau khi khởi động, hãy kiểm tra trạng thái để xem nó có chạy thành công không:

sudo systemctl status postgresql

Nếu bạn thấy Active: active (running), đó là một dấu hiệu tốt. Tuy nhiên, chúng ta cần kiểm tra kỹ hơn. Hãy xem nhật ký (log) của PostgreSQL để tìm bất kỳ thông báo lỗi nào:

sudo journalctl -u postgresql

Nếu không có lỗi nào đáng báo động, bước xác minh cuối cùng và quan trọng nhất là kết nối đến cơ sở dữ liệu và yêu cầu nó cho biết thư mục dữ liệu hiện tại của nó là gì. Lệnh sau sẽ làm điều đó:

sudo -u postgres psql -c "SHOW data_directory;"

Hình minh họa

Nếu kết quả trả về chính xác là đường dẫn mới (/mnt/data/postgresql), xin chúc mừng! Bạn đã di chuyển thành công thư mục dữ liệu của mình.

Các lưu ý và xử lý sự cố thường gặp

Mặc dù quy trình trên khá đơn giản, nhưng đôi khi vẫn có thể xảy ra sự cố. Dưới đây là một số vấn đề thường gặp và cách khắc phục chúng, giúp bạn tự tin xử lý tình huống nếu có điều gì đó không đi đúng kế hoạch.

PostgreSQL không khởi động sau khi thay đổi thư mục dữ liệu

Đây là sự cố phổ biến nhất. Bạn chạy lệnh systemctl start postgresql nhưng dịch vụ không thể khởi động. Nguyên nhân gần như luôn luôn nằm ở quyền truy cập hoặc đường dẫn sai.

Hình minh họa

Kiểm tra lại quyền truy cập thư mục: Đây là thủ phạm số một. Hãy chắc chắn rằng bạn đã gán quyền sở hữu thư mục dữ liệu mới cho người dùng postgres. Chạy lại các lệnh sau để đảm bảo:

sudo chown -R postgres:postgres /mnt/data/postgresql
sudo chmod 750 /mnt/data/postgresql

Hãy kiểm tra kỹ từng thư mục trong đường dẫn. Ví dụ, nếu đường dẫn là /mnt/data/postgresql, người dùng postgres cũng cần có quyền thực thi (execute permission) trên /mnt/mnt/data để có thể truy cập vào thư mục con.

Kiểm tra file log: File log là người bạn tốt nhất của bạn. Lệnh sudo journalctl -u postgresql hoặc kiểm tra log trong /var/log/postgresql/ sẽ cho bạn biết chính xác lý do tại sao dịch vụ không khởi động được. Các thông báo lỗi như “Permission denied” sẽ chỉ thẳng vào vấn đề quyền truy cập.

Xác minh đường dẫn trong postgresql.conf: Một lỗi chính tả nhỏ trong tệp cấu hình cũng có thể gây ra sự cố. Mở lại tệp postgresql.conf và kiểm tra kỹ xem đường dẫn data_directory có chính xác tuyệt đối không. Bất kỳ sai sót nào, dù là một ký tự, cũng sẽ khiến PostgreSQL không tìm thấy dữ liệu của nó.

Lỗi phân quyền dẫn đến không truy cập cơ sở dữ liệu được

Một kịch bản khác là dịch vụ PostgreSQL khởi động thành công (bạn thấy active (running)) nhưng bạn lại không thể kết nối đến cơ sở dữ liệu, hoặc một số thao tác bị từ chối với lỗi liên quan đến quyền.

Hình minh họa

Kiểm tra ownership và permissions một lần nữa: Vấn đề này vẫn xoay quanh quyền. Có thể bạn đã chown thư mục gốc nhưng quên tùy chọn -R (recursive), khiến các tệp và thư mục con bên trong vẫn thuộc sở hữu của root. Hãy chạy lại lệnh sudo chown -R postgres:postgres /mnt/data/postgresql để chắc chắn quyền sở hữu được áp dụng cho toàn bộ cây thư mục.

SELinux hoặc AppArmor: Trên một số hệ thống được tăng cường bảo mật, các cơ chế như SELinux (trên các bản phân phối dựa trên Red Hat) hoặc AppArmor (trên Ubuntu) có thể ngăn chặn PostgreSQL truy cập vào một đường dẫn không chuẩn. Bạn cần cập nhật các quy tắc của AppArmor để cho phép PostgreSQL đọc/ghi vào thư mục mới. Đối với Ubuntu, bạn cần chỉnh sửa file cấu hình AppArmor cho PostgreSQL, thường nằm ở /etc/apparmor.d/tuples/abstraction/postgresql và thêm quy tắc cho thư mục mới, sau đó tải lại profile AppArmor. Đây là một bước nâng cao nhưng rất quan trọng trên các môi trường sản xuất (production).

Các thực hành tốt nhất khi di chuyển thư mục dữ liệu PostgreSQL

Để đảm bảo quá trình di chuyển diễn ra an toàn và giảm thiểu rủi ro, hãy luôn tuân thủ các thực hành tốt nhất sau đây. Chúng không chỉ là các bước kỹ thuật mà còn là tư duy phòng ngừa để bảo vệ dữ liệu quý giá của bạn.

Hình minh họa

  • Luôn sao lưu dữ liệu trước khi thực hiện: Đây là quy tắc vàng. Trước khi bạn chạm vào bất cứ thứ gì, hãy tạo một bản sao lưu hoàn chỉnh cho cơ sở dữ liệu của mình bằng pg_dump hoặc pg_dumpall. Nếu có sự cố không thể khắc phục, bạn vẫn có thể khôi phục lại từ bản sao lưu này. Đừng bao giờ chủ quan bỏ qua bước này.

  • Sử dụng lệnh rsync để bảo toàn quyền: Khi sao chép dữ liệu, hãy ưu tiên sử dụng rsync -av thay vì cp. Tùy chọn -a của rsync là một công cụ mạnh mẽ, nó đảm bảo rằng quyền sở hữu, quyền truy cập, dấu thời gian và các thuộc tính quan trọng khác của tệp được giữ nguyên. Điều này giúp bạn tránh được rất nhiều lỗi tiềm ẩn liên quan đến quyền sau này.

  • Không bao giờ di chuyển dữ liệu khi PostgreSQL đang chạy: Hãy nhấn mạnh lại một lần nữa. Việc dừng dịch vụ PostgreSQL là bắt buộc. Di chuyển dữ liệu “sống” là cách nhanh nhất để làm hỏng cơ sở dữ liệu của bạn vĩnh viễn.

  • Theo dõi logs kỹ càng sau khi chuyển đổi: Sau khi khởi động lại dịch vụ ở vị trí mới, đừng vội cho rằng mọi thứ đã ổn. Hãy chủ động kiểm tra file log của PostgreSQL (journalctl -u postgresql) trong vài giờ hoặc vài ngày sau đó để phát hiện sớm các cảnh báo hoặc lỗi bất thường mà có thể không xuất hiện ngay lập tức.

  • Tạm thời đổi tên thư mục cũ, không xóa ngay: Thay vì xóa thư mục dữ liệu cũ ngay sau khi sao chép, hãy đổi tên nó thành một cái gì đó như main_old. Giữ lại thư mục cũ trong vài ngày cho đến khi bạn hoàn toàn chắc chắn rằng hệ thống đang hoạt động ổn định trên vị trí mới. Đây là chiếc phao cứu sinh cuối cùng của bạn nếu có vấn đề xảy ra.

Tuân thủ những nguyên tắc này không chỉ giúp bạn thực hiện di chuyển thành công mà còn hình thành thói quen quản trị hệ thống chuyên nghiệp và cẩn trọng.

Kết luận

Việc di chuyển thư mục dữ liệu PostgreSQL trên Ubuntu 20.04 từ vị trí mặc định sang một phân vùng mới là một nhiệm vụ quản trị hệ thống quan trọng, giúp tối ưu hóa hiệu suất, đơn giản hóa việc quản lý dung lượng và tăng cường bảo mật. Mặc dù quá trình này đòi hỏi sự cẩn thận, nhưng bằng cách tuân theo một quy trình rõ ràng, bạn hoàn toàn có thể thực hiện nó một cách an toàn và hiệu quả.

Chúng ta đã cùng nhau đi qua các bước cốt lõi: từ việc chuẩn bị một “ngôi nhà” mới với việc tạo thư mục và phân quyền chính xác, cho đến việc dừng dịch vụ một cách an toàn, sao chép dữ liệu bằng rsync, cập nhật file cấu hình postgresql.conf, và cuối cùng là khởi động lại và xác minh hoạt động. Bên cạnh đó, việc nắm rõ cách xử lý các sự cố thường gặp như lỗi khởi động do sai quyền và tuân thủ các thực hành tốt nhất như sao lưu trước khi làm sẽ là chìa khóa để đảm bảo thành công và bảo vệ dữ liệu của bạn.

Hy vọng rằng bài viết chi tiết này từ Bùi Mạnh Đức đã cung cấp cho bạn kiến thức và sự tự tin để tự mình quản lý và tối ưu hóa hệ thống cơ sở dữ liệu PostgreSQL. Việc chủ động trong việc quản lý hạ tầng là một kỹ năng vô giá, giúp hệ thống của bạn luôn hoạt động mạnh mẽ và ổn định. Để tìm hiểu sâu hơn, bạn luôn có thể tham khảo tài liệu chính thức của PostgreSQL và các bài viết chuyên sâu khác về tối ưu hóa cơ sở dữ liệu trên Ubuntu.

Đánh giá
Tác giả

Mạnh Đức

Có cao nhân từng nói rằng: "Kiến thức trên thế giới này đầy rẫy trên internet. Tôi chỉ là người lao công cần mẫn đem nó tới cho người cần mà thôi !"

Chia sẻ