SSD Nodes Learn Hosting plans →
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-31

Ollama pull vs run: Lokasi Model dan Cara Memindahkannya

Pahami beda ollama pull dan ollama run, lokasi file model, alasan disk root VPS penuh, serta cara memindahkan penyimpanannya dengan aman.

perbedaan ollama pull dan ollama run

ollama pull mengunduh model lalu berhenti. ollama run mengunduh model hanya jika belum tersedia, kemudian memuatnya ke memori dan membuka chat interaktif. Proses pengunduhannya sama, dan file disimpan di lokasi yang sama. Hanya run yang terus berjalan setelah itu.

Perbedaan tersebut menentukan perintah yang digunakan dalam skrip dan perintah yang digunakan secara interaktif pada terminal.

ollama pull gemma4
ollama run gemma4
ollama run gemma4 "Reply with one word: ready"

Baris pertama mengambil model lalu keluar, sehingga aman digunakan dalam provisioning dan unit systemd. Baris kedua membuka sesi chat; ketik /bye atau tekan Ctrl+D untuk mengakhirinya. Baris ketiga mengirim satu prompt, menampilkan jawaban, lalu keluar. Bentuk ini sesuai untuk skrip yang memerlukan jawaban, bukan sesi interaktif. Bentuk ketiga tetap membiarkan panjang jawaban sepenuhnya ditentukan oleh model. Pertanyaan satu baris dapat menghasilkan tiga paragraf. Karena itu, membatasi jawaban dengan num_predict diperlukan agar run dalam skrip tetap berada dalam ukuran yang dapat digunakan oleh pemanggil. Nama model dapat berubah dengan cepat, jadi anggap gemma4 di sini sebagai placeholder. Nama tersebut adalah contoh yang digunakan dokumentasi resmi Ollama per Agustus 2026, dan tag apa pun dari library berperilaku sama. Jika Anda ingin mengganti model dengan model yang ukurannya telah disesuaikan berdasarkan server nyata, menjalankan Nemotron 3.5 Lightning pada VPS mencantumkan tag yang tepat untuk di-pull dan kapasitas memori yang perlu tersedia.

Mengapa ollama run pertama tampak berhenti

run pertama pada VPS baru dapat berjalan tanpa menampilkan output selama beberapa menit. Tidak ada yang rusak. Prompt chat tidak dapat muncul sebelum model tersimpan di disk dan dimuat ke memori. Jadi, run sedang mengunduh beberapa gigabyte sebelum dapat menampilkan apa pun.

Ada dua hal yang menyembunyikan proses tersebut. Ollama hanya menampilkan bilah progres ketika output-nya merupakan terminal. Karena itu, run di dalam shell script, cron job, langkah CI, atau ssh host ollama run ... biasa tidak menampilkan apa pun selama proses unduh. Setelah seluruh byte tersimpan, file tersebut masih harus dibaca dari disk ke RAM sebelum token pertama muncul. Pada VPS kecil, proses pembacaan ini lambat. Jika mesin tidak memiliki memori yang cukup untuk model, kernel mulai menggunakan swap dan waktu tunggu menjadi jauh lebih lama.

Pantau proses tersebut dari sesi kedua, bukan dengan menebak:

df -h /
watch -n5 df -h /

Ruang kosong yang berkurang secara bertahap berarti proses unduh masih berjalan. Jika ruang kosong berhenti berkurang sementara perintah masih sibuk, berarti proses unduh telah selesai dan pemuatan ke memori telah dimulai.

Inilah alasan model sebaiknya diunduh terlebih dahulu. Orang yang mengetik ollama run seharusnya tidak perlu menunggu proses unduh.

Tarik model sebelum ada yang memintanya

Hal yang sama berlaku untuk apa pun yang bukan manusia: agen coding yang diarahkan ke endpoint Ollama Anda biasanya akan menyerah pada permintaan pertama, bukan menunggu unduhan berukuran beberapa gigabita selesai. Pada server baru, lakukan pull dalam skrip yang sama dengan skrip untuk menginstal server:

curl -fsSL https://ollama.com/install.sh | sh
ollama pull gemma4

Jika Anda menyiapkan server untuk pertama kalinya, panduan lengkap instalasi Ollama pada VPS membahas service itu sendiri dan pihak yang diizinkan untuk mengaksesnya. Setelah itu, hal yang perlu disiapkan adalah pull yang tetap berjalan setelah terminal ditutup, karena unduhan yang terhenti di tengah jalan dapat menyebabkan model store hanya terisi sebagian.

Jalankan di dalam tmux, atau serahkan kepada systemd sebagai unit one-shot yang berjalan saat boot. Tulis /etc/systemd/system/ollama-pull.service:

[Unit]
Description=Pre-pull Ollama models
Wants=ollama.service network-online.target
After=ollama.service network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/sh -c 'until ollama list >/dev/null 2>&1; do sleep 2; done'
ExecStart=/bin/sh -c 'ollama pull gemma4'

[Install]
WantedBy=multi-user.target

Kedua perintah sengaja dijalankan melalui /bin/sh -c. ExecStart= tanpa argumen memerlukan path absolut, dan installer tidak selalu menempatkan binary di direktori yang sama, sehingga command -v ollama pada server Anda sendiri adalah satu-satunya jawaban yang dapat diandalkan. Menjalankannya melalui shell menggunakan PATH milik service, bukan path yang disalin dari panduan. ExecStart pertama juga penting: After=ollama.service berarti unit server sudah dijalankan, bukan berarti server sudah siap, sehingga loop menunggu sampai ollama list memberikan respons sebelum pull dimulai.

sudo systemctl daemon-reload
sudo systemctl enable --now ollama-pull.service
journalctl -u ollama-pull.service

Journal seharusnya menunjukkan bahwa pull selesai tanpa error, lalu ollama list seharusnya menampilkan model tersebut. Untuk menjaga tag yang terus berubah tetap terbaru, tambahkan systemd timer atau entri cron mingguan yang menjalankan pull yang sama. Menjalankan pull ulang pada tag yang telah berubah akan mengunduh layer baru dan membuat layer lama tidak lagi direferensikan, lalu layer tersebut dibersihkan saat server dijalankan kembali.

Apa yang terjadi ketika pull terhenti

Setiap layer model disimpan berdasarkan hash dari kontennya sendiri. Karena itu, pull yang terhenti bukan pekerjaan yang sia-sia: jalankan kembali ollama pull yang sama, dan layer yang sudah selesai akan dikenali lalu dilewati, sehingga pengunduhan dilanjutkan dari layer yang terputus.

Ada satu tindakan yang menghapus progres tersebut. Saat server Ollama dimulai, server menghapus layer tersimpan yang tidak dirujuk oleh manifest model mana pun, dan layer parsial yang ditinggalkan oleh pull yang terhenti persis termasuk di dalamnya. Jadi, me-restart service sebelum mencoba lagi akan membuang bagian yang sudah diunduh. Coba pull kembali terlebih dahulu, lalu restart setelahnya. Jika unduhan parsial memang harus tetap ada setelah restart, tetapkan OLLAMA_NOPRUNE=1 di environment service, lalu hapus kembali pengaturan tersebut, karena pembersihan saat startup itulah yang mencegah layer yatim menumpuk di disk.

Jika pull terhenti dengan no space left on device, kosongkan ruang sebelum mencoba lagi. Jika df melaporkan disk penuh, tetapi du pada direktori model tidak menjelaskan penggunaan ruang tersebut, berarti ruang itu digunakan di tempat lain. Baca alasan df dan du dapat menunjukkan hasil yang berbeda sebelum menghapus apa pun.

Di mana Ollama menyimpan model pada VPS?

Tanyakan langsung kepada server Anda, bukan mengandalkan path dari panduan mana pun, termasuk panduan ini. Lokasinya berbeda antara instalasi paket dan container, serta berubah lagi jika seseorang telah menetapkan OLLAMA_MODELS.

systemctl cat ollama.service
getent passwd ollama
sudo find / -xdev -type d -name blobs 2>/dev/null

systemctl cat mencetak unit file beserta semua drop-in, sehingga baris OLLAMA_MODELS yang Anda tetapkan atau yang sudah disertakan dalam image akan terlihat di sana. Jika tidak ada baris tersebut, penyimpanan berada di bawah direktori home akun yang menjalankan service, dan getent passwd mencetak direktori home itu pada field keenam yang dipisahkan dengan titik dua. find mencari direktori blobs pada satu filesystem. Di sanalah layer sebenarnya ditulis. Hapus -xdev jika model mungkin sudah berada pada mount terpisah.

Sekarang ukur penggunaannya dan baca hasil Anda sendiri:

ollama list
df -h /
sudo du -sh /the/directory/you/found
sudo du -h -d1 /the/directory/you/found

Penyimpanan tersebut memiliki dua bagian. manifests berisi satu file kecil untuk setiap tag model. File itu mencantumkan layer yang menjadi dasar tag tersebut. blobs berisi layer itu sendiri. Setiap layer diberi nama berdasarkan hash isinya, dan hampir seluruh ukuran penyimpanan berada di sana. Karena layer digunakan bersama oleh beberapa tag, dua model yang dibangun dari weight yang sama masing-masing melaporkan ukurannya sendiri dalam ollama list, tetapi ruang tersebut hanya digunakan sekali pada disk. Oleh karena itu, ukuran yang tercantum dapat berjumlah lebih besar daripada ukuran yang dilaporkan du untuk direktori tersebut.

File model memenuhi filesystem root VPS kecil lebih cepat daripada hampir semua hal lain yang mungkin Anda instal. Faktor terbesar yang menentukan ukurannya adalah format weight. Memilih antara q4, q8, dan fp16 dapat menghemat gigabyte per model.

Pindahkan model ke volume data dengan OLLAMA_MODELS

Jika rencana Anda mencakup disk kedua atau volume data yang lebih besar, pindahkan penyimpanan sebelum filesystem root penuh. Hentikan server terlebih dahulu agar Anda tidak menyalin file yang masih sedang ditulis.

sudo systemctl stop ollama
sudo mkdir -p /mnt/data/ollama-models
sudo rsync -a /the/directory/you/found/ /mnt/data/ollama-models/
sudo chown -R ollama:ollama /mnt/data/ollama-models
sudo systemctl edit ollama.service

systemctl edit membuka editor pada file drop-in. Dengan demikian, unit yang disediakan paket tetap tidak berubah dan pembaruan paket tidak dapat menimpa perubahan Anda. Tambahkan dua baris berikut:

[Service]
Environment="OLLAMA_MODELS=/mnt/data/ollama-models"
sudo systemctl daemon-reload
sudo systemctl restart ollama
systemctl show ollama --property=Environment
ollama list

systemctl show harus menampilkan path baru Anda, dan ollama list harus menampilkan model yang sama seperti sebelum pemindahan. Daftar kosong berarti server tidak dapat membaca direktori baru. Service berjalan sebagai user ollama, sehingga user tersebut memerlukan akses baca dan tulis ke tujuan. Akses ini diberikan oleh baris chown di atas. Periksa journalctl -e -u ollama untuk menemukan error izin yang menyebutkan path baru. Hapus salinan lama hanya setelah daftarnya benar, karena pemindahan yang gagal lalu diikuti penghapusan sumber akan mengharuskan Anda mengunduh semuanya lagi.

Opsi lainnya mempertahankan path asli dan me-mount volume data ke path tersebut:

echo '/mnt/data/ollama-models /the/directory/you/found none bind 0 0' | sudo tee -a /etc/fstab
sudo mount -a
findmnt /the/directory/you/found
df -h /

findmnt yang menampilkan mount berarti bind mount sudah aktif. Bind mount berguna jika ada komponen lain pada server yang sudah mengharapkan lokasi default. Namun, ada satu hal yang perlu diperhatikan: file yang Anda salin masih berada di bawah mount point pada disk root, tetapi tersembunyi oleh mount tersebut. Karena itu, ruang penyimpanan belum dikembalikan sampai Anda melakukan unmount dan menghapus file tersebut. Variabel lingkungan lebih mudah dijelaskan kepada orang yang akan login berikutnya.

Lokasi penyimpanannya di dalam container

Image resmi menyimpan model di lokasi yang Anda mount, bukan di direktori host milik pengguna ollama. Perintah run yang didokumentasikan adalah:

docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

ollama sebelum tanda titik dua adalah named volume Docker, sedangkan /root/.ollama adalah lokasi tempat server menulis data di dalam container. Karena itu, du terhadap path dari bagian sebelumnya tidak menemukan apa pun. Tidak ada data di lokasi tersebut. Tampilkan lokasi dan ukurannya yang sebenarnya:

docker volume inspect ollama
docker system df -v
docker exec -it ollama ollama list

Baca field Mountpoint dari docker volume inspect, lalu jalankan sudo du -sh terhadap lokasi tersebut. Untuk menyimpan model pada data volume, ganti named volume dengan direktori host (-v /mnt/data/ollama:/root/.ollama), lalu buat ulang container. Container menulis sebagai root, sehingga direktori host tersebut akan dimiliki oleh root. Pada rootless Podman, ID dipetakan ke rentang subuid milik pengguna Anda. Karena itu, kepemilikan pada host kembali terlihat berbeda: menjalankan Ollama pada rootless Podman menjelaskan pemetaan tersebut.

Perhatikan pembersihan data. docker volume prune menghapus setiap volume yang tidak dirujuk oleh container mana pun. Jika Anda menghapus atau membuat ulang container ollama tanpa volumenya, proses prune berikutnya akan menghapus semua model yang telah Anda download. Data tersebut tidak dapat dipulihkan selain dengan mendownloadnya kembali. Baca cara melakukan prune penggunaan disk Docker pada VPS sebelum menjalankan prune pada server yang menyimpan model.

Hapus model dengan ollama rm, bukan dengan rm

ollama list
ollama rm gemma4
ollama list
df -h /

ollama rm menghapus manifest untuk tag tersebut, lalu menghapus layer yang tidak lagi dirujuk oleh manifest mana pun. Ruang disk kembali tersedia segera setelah file-file itu di-unlink, sehingga df langsung berpindah. Karena layer digunakan bersama, menghapus salah satu dari dua tag yang sangat terkait dapat membebaskan ruang yang jauh lebih kecil daripada ukuran ollama list yang tercetak di sebelahnya. Ini adalah perilaku yang benar, bukan kegagalan penghapusan.

Menghapus file secara manual merusak pasangan tersebut. Hapus sebuah blob dengan rm, tetapi manifest masih mencantumkannya. Akibatnya, ollama list tetap menampilkan model tersebut dan setiap upaya untuk menggunakannya gagal saat layer yang hilang dibaca. Hapus manifest secara manual, dan layer-nya tetap berada di disk tanpa ada yang merujuknya. Layer tersebut akan terus menggunakan ruang yang tidak akan dilaporkan oleh perintah Ollama mana pun. Jika Anda sudah melakukannya, ollama rm pada tag tersebut akan menghapus entri yang tersisa, dan me-restart server akan menghapus layer yang tidak lagi dirujuk.

Ada satu perbedaan terakhir karena keduanya sering tertukar. ollama rm berkaitan dengan disk. ollama stop gemma4 mengeluarkan model dari memori dan sama sekali tidak membebaskan ruang disk. Durasi model tetap berada di RAM setelah pengunduhan selesai adalah pengaturan terpisah, dan mempertahankan model tetap dimuat agar tidak dimuat ulang pada setiap permintaan membahasnya.

FAQ

Apa perbedaan antara ollama pull dan ollama run?

ollama pull mengunduh model ke disk lalu berhenti. ollama run memeriksa apakah model sudah ada di disk, mengunduhnya jika belum ada, memuatnya ke memori, lalu membuka sesi chat interaktif. Keduanya menulis file yang sama ke direktori yang sama. Gunakan pull dalam provisioning dan skrip, serta gunakan run saat seseorang bekerja langsung di terminal. ollama run <model> "your prompt" mengirim satu prompt lalu berhenti. Ini adalah bentuk run yang dapat digunakan dalam skrip.

Mengapa ollama run pertama saya tampak macet?

Model sedang diunduh. Prompt chat tidak dapat muncul sebelum model tersimpan di disk dan dimuat ke memori. Ukuran model dapat mencapai beberapa gigabyte. Ollama hanya menampilkan progress bar jika output diarahkan ke terminal. Karena itu, run di dalam skrip, cron job, atau ssh host ollama run ... tidak menampilkan apa pun selama proses berlangsung. Buka sesi kedua dan jalankan watch -n5 df -h /. Jika ruang kosong berkurang secara bertahap, unduhan sedang berlangsung. Unduh model terlebih dahulu agar waktu tunggu ini tidak terjadi.

Di mana Ollama menyimpan modelnya?

Lokasinya bergantung pada metode instalasi. Karena itu, tampilkan lokasinya dan jangan mengandalkan asumsi. Jalankan systemctl cat ollama.service untuk melihat apakah OLLAMA_MODELS ditetapkan di unit atau drop-in. Jika tidak, penyimpanan berada di bawah direktori home akun yang digunakan service untuk berjalan. Lokasi akun tersebut ditampilkan oleh getent passwd ollama. sudo find / -xdev -type d -name blobs 2>/dev/null menemukan direktori layer secara langsung. Untuk image container, penyimpanan berada di dalam volume yang di-mount. docker volume inspect ollama menampilkan Mountpoint pada host.

Bagaimana cara memindahkan model Ollama ke disk lain?

Hentikan service, salin penyimpanan ke lokasi baru dengan rsync -a, berikan kepemilikan direktori kepada akun service dengan sudo chown -R ollama:ollama <directory>, lalu jalankan sudo systemctl edit ollama.service dan tambahkan Environment="OLLAMA_MODELS=<directory>" di bawah baris [Service]. Muat ulang konfigurasi dengan sudo systemctl daemon-reload, lalu restart service. Konfirmasikan dengan systemctl show ollama --property=Environment dan ollama list. Daftar yang kosong hampir selalu berarti user ollama tidak dapat membaca direktori baru. journalctl -e -u ollama akan menampilkan path tersebut.

Apakah menghapus file model akan membebaskan ruang disk?

Menghapus file secara manual memang membebaskan ruang, tetapi membuat penyimpanan tidak konsisten. Jika sebuah blob dihapus, manifest masih mencantumkan model tersebut. Akibatnya, model tetap muncul di ollama list dan gagal saat digunakan. Jika sebuah manifest dihapus, layer-nya tetap berada di disk tanpa referensi. Gunakan ollama rm <model>. Perintah ini menghapus manifest, lalu menghapus layer yang tidak diperlukan model lain. Jika file sudah terlanjur dihapus secara manual, jalankan ollama rm pada tag untuk menghapus entrinya, lalu restart server. Server akan menghapus layer yang tidak dirujuk oleh manifest mana pun.