SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor

ollama pull vs run: Lokasi Model dan Cara Memindahkannya

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

ollama pull vs ollama run

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

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

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, mencetak jawabannya, lalu keluar. Bentuk ini sesuai untuk skrip yang memerlukan jawaban, bukan sesi interaktif. Nama model dapat berubah dengan cepat. Karena itu, anggap gemma4 di sini sebagai placeholder: nama tersebut adalah contoh yang digunakan dalam dokumentasi resmi Ollama per Agustus 2026, dan tag apa pun dari library akan berperilaku sama.

Why the first ollama run looks like it has frozen

A first run on a fresh VPS can sit with no output for several minutes. Nothing is broken. The chat prompt cannot appear until the model is on disk and loaded into memory, so run is doing a multi-gigabyte download before it has anything to show you.

Two things hide that work. Ollama draws its progress bar only when its output is a terminal, so a run inside a shell script, a cron job, a CI step or a plain ssh host ollama run ... prints nothing at all while it downloads. Then, once the bytes have landed, the file still has to be read from disk into RAM before the first token, and on a small VPS that read is slow. If the box does not have the memory for the model, the kernel starts swapping and the wait grows much longer.

Watch it from a second session instead of guessing:

df -h /
watch -n5 df -h /

Free space falling in steps means the download is still running. Free space that stops falling while the command is still busy means the download finished and the load into memory has started.

This is the argument for pulling ahead of time. The person who types ollama run should never be the one paying for the download.

Ambil model sebelum ada yang memintanya

Pada server baru, jalankan script yang sama seperti yang digunakan 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 menjelaskan service itu sendiri dan pihak yang diizinkan untuk mengaksesnya. Setelah itu, hal yang perlu disiapkan adalah proses pull yang tetap berjalan setelah terminal ditutup, karena proses download yang terhenti di tengah jalan dapat membuat penyimpanan model hanya terisi sebagian.

Jalankan proses tersebut 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 tersebut sengaja dijalankan melalui /bin/sh -c. ExecStart= tanpa pembungkus memerlukan path absolut, dan installer tidak selalu menempatkan binary di direktori yang sama. Karena itu, 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. Karena itu, loop menunggu hingga ollama list memberikan respons sebelum proses pull dimulai.

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

Journal harus menunjukkan bahwa proses pull selesai tanpa error. Setelah itu, ollama list harus menampilkan model tersebut. Untuk menjaga tag yang terus berubah tetap mutakhir, 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 meninggalkan layer lama tanpa referensi. Layer tersebut akan dibersihkan saat server dijalankan kembali.

Apa yang terjadi saat pull terhenti

Setiap layer model disimpan berdasarkan hash dari isinya sendiri. Karena itu, pull yang terhenti tidak membuang pekerjaan yang sudah dilakukan: jalankan kembali ollama pull yang sama. Layer yang sudah selesai akan dikenali dan dilewati, sehingga unduhan 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. Layer parsial yang ditinggalkan oleh pull yang terhenti persis termasuk kategori tersebut. Jadi, jika Anda me-restart service sebelum mencoba lagi, bagian yang sudah diunduh akan terhapus. Coba pull kembali terlebih dahulu, lalu restart service setelahnya. Jika unduhan parsial memang harus tetap ada setelah restart, tetapkan OLLAMA_NOPRUNE=1 di lingkungan service, lalu hapus kembali pengaturan tersebut. 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 dan du pada direktori model tidak menjelaskan penggunaan tersebut, berarti ruang digunakan di tempat lain. Baca alasan df dan du dapat menunjukkan hasil berbeda sebelum menghapus apa pun.

Di mana Ollama menyimpan model pada VPS?

Tanyakan langsung kepada server Anda. Jangan mengandalkan path dari panduan mana pun, termasuk panduan ini. Lokasinya berbeda antara instalasi paket dan container. Lokasi tersebut juga berubah jika ada yang menetapkan OLLAMA_MODELS.

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

systemctl cat menampilkan unit file beserta semua drop-in. Dengan demikian, baris OLLAMA_MODELS yang Anda tetapkan atau yang sudah disertakan dalam image akan terlihat di sana. Jika baris tersebut tidak ada, penyimpanan berada di bawah home directory akun yang menjalankan service. getent passwd menampilkan home directory tersebut pada field keenam yang dipisahkan oleh titik dua. find mencari satu filesystem untuk menemukan directory blobs. Di situlah 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 tersebut mencantumkan layer pembentuk tag. 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 dibuat dari weight yang sama akan melaporkan ukuran masing-masing di ollama list, tetapi hanya menggunakan ruang tersebut satu kali pada disk. Oleh karena itu, total ukuran yang tercantum dapat lebih besar daripada ukuran yang dilaporkan du untuk directory tersebut.

File model dapat memenuhi root filesystem VPS kecil lebih cepat daripada komponen lain yang mungkin Anda instal. Faktor terbesar yang menentukan ukurannya adalah format weight. Memilih antara q4, q8, dan fp16 dapat menghemat gigabyte untuk setiap 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 upgrade 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 diatur oleh baris chown di atas. Periksa journalctl -e -u ollama untuk melihat error izin yang menyebutkan path baru. Hapus salinan lama hanya setelah daftar sudah benar. 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 sudah aktif. Bind mount berguna jika ada komponen lain pada server yang sudah mengharapkan lokasi default. Ada satu hal yang perlu diperhatikan: file yang Anda salin masih berada di bawah mount point pada disk root, tetapi tersembunyi oleh mount. Ruang tersebut baru dikembalikan setelah Anda melakukan unmount dan menghapus file-file itu. Variabel lingkungan lebih mudah dijelaskan kepada orang yang login berikutnya.

Di mana container menyimpannya

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

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

ollama sebelum titik dua adalah Docker volume bernama, sedangkan /root/.ollama adalah lokasi tempat server menulis di dalam container. Jadi, du terhadap path dari bagian sebelumnya tidak menemukan apa pun karena tidak ada data di sana. 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 terhadapnya. Untuk menyimpan model pada volume data, ganti volume bernama tersebut 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 dengan rootless Podman membahas pemetaan tersebut.

Perhatikan satu hal tentang pembersihan. 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 unduh. Model tersebut hanya dapat dipulihkan dengan mengunduhnya 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 tersedia kembali segera setelah file-file tersebut dihapus, sehingga df langsung berpindah. Karena layer dapat digunakan bersama, menghapus salah satu dari dua tag yang sangat terkait dapat membebaskan ruang yang jauh lebih kecil daripada ukuran ollama list yang tercantum di sebelahnya. Ini adalah perilaku yang benar, bukan kegagalan penghapusan.

Menghapus file secara manual merusak pasangan tersebut. Hapus blob dengan rm, dan 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 referensi apa pun. Layer tersebut 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 memulai ulang server akan menghapus layer yang tidak dirujuk oleh apa pun.

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. Lama model tetap berada di RAM setelah pengunduhan selesai merupakan pengaturan terpisah. mempertahankan model tetap dimuat agar tidak dimuat ulang pada setiap permintaan membahas pengaturan tersebut.

FAQ

Apa perbedaan antara ollama pull dan ollama run?

ollama pull mengunduh model ke disk lalu keluar. 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 saat provisioning dan dalam skrip, lalu gunakan run saat seseorang bekerja langsung di terminal. ollama run <model> "your prompt" mengirim satu prompt lalu keluar. 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, sementara 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 ... sama sekali tidak menampilkan apa pun selama proses berlangsung. Buka sesi kedua dan jalankan watch -n5 df -h /. Jika ruang kosong berkurang secara bertahap, berarti pengunduhan sedang berlangsung. Unduh model terlebih dahulu agar tidak perlu menunggu.

Di mana Ollama menyimpan modelnya?

Lokasinya bergantung pada metode instalasi. Karena itu, tampilkan lokasinya dan jangan berasumsi. Jalankan systemctl cat ollama.service untuk melihat apakah OLLAMA_MODELS ditetapkan di unit atau drop-in. Jika tidak, penyimpanan berada di direktori home akun yang digunakan service, dan lokasinya dapat ditampilkan dengan getent passwd ollama. sudo find / -xdev -type d -name blobs 2>/dev/null menemukan direktori layer secara langsung. Untuk container image, penyimpanan berada di dalam volume yang di-mount, dan 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?

Menghapus file secara manual memang membebaskan byte, 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 ada yang merujuknya. 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.