Lewati ke konten utama
  1. Posts/

Cara Mengatasi Error 'Device /dev/dri/card0 Does Not Exist' pada Jellyfin LXC di Proxmox

Noor Khafidzin
Penulis
Noor Khafidzin
Seorang homelab enthusiast yang terobsesi pada efisiensi sistem dan seni pemecahan masalah (troubleshooting).
Daftar isi

Menjalankan Jellyfin di dalam LXC container Proxmox adalah cara populer untuk membangun media server yang ringan dan efisien. Namun ada satu error yang sering membuat frustrasi, terutama setelah upgrade hardware atau reboot: Task ERROR: Device /dev/dri/card0 does not exist.

Error ini menyebabkan hardware transcoding di Jellyfin tidak bisa berjalan sama sekali, karena LXC tidak bisa menemukan GPU yang sudah di-passthrough. Artikel ini akan menjelaskan penyebab root-nya dan solusi permanen yang bisa langsung diterapkan di Proxmox host.


Kenapa Error Ini Terjadi?
#

Saat Proxmox host melakukan boot, kernel Linux memuat sejumlah driver secara otomatis. Salah satunya adalah SimpleDRM (simpledrm), yaitu driver display generik yang digunakan kernel sebagai fallback untuk menampilkan output grafis selama proses boot awal.

Masalahnya: SimpleDRM mendaftarkan dirinya sendiri sebagai perangkat DRI lebih dahulu sebelum driver GPU asli (misalnya i915 untuk Intel, atau amdgpu) sempat terinisialisasi. Akibatnya, urutan penomoran /dev/dri/card* menjadi tidak konsisten:

  • Boot pertama: GPU asli terdaftar sebagai /dev/dri/card0, SimpleDRM sebagai card1
  • Boot berikutnya: urutan bisa terbalik, GPU asli menjadi /dev/dri/card1

Karena konfigurasi LXC sudah di-hardcode menggunakan card0, setiap kali GPU asli “mendarat” di card1, container gagal menemukan perangkat tersebut dan melempar error.


Solusi: Nonaktifkan SimpleDRM via Kernel Boot Parameter
#

Solusi paling bersih dan permanen adalah menonaktifkan SimpleDRM menggunakan parameter initcall_blacklist pada kernel boot. Cara ini mencegah simpledrm terinisialisasi sama sekali, sehingga GPU asli selalu terdaftar terlebih dahulu dan mendapatkan nomor yang konsisten.

Pertama, cek bootloader yang digunakan oleh Proxmox host kamu:

# Cek apakah menggunakan GRUB atau systemd-boot
efibootmgr -v | grep -i 'grub\|systemd'
# atau
ls /boot/grub /boot/efi/EFI/proxmox 2>/dev/null

Jika Menggunakan GRUB
#

Edit file konfigurasi GRUB pada Proxmox host:

vi /etc/default/grub

Cari baris GRUB_CMDLINE_LINUX dan tambahkan parameter berikut di bagian akhir nilai yang ada:

GRUB_CMDLINE_LINUX="... initcall_blacklist=simpledrm_platform_driver_init"

Contoh sebelum dan sesudah:

# Sebelum
GRUB_CMDLINE_LINUX="quiet"

# Sesudah
GRUB_CMDLINE_LINUX="quiet initcall_blacklist=simpledrm_platform_driver_init"

Setelah itu, terapkan perubahan dan regenerasi konfigurasi GRUB:

update-grub

Jika Menggunakan systemd-boot
#

Edit file cmdline kernel:

vi /etc/kernel/cmdline

Tambahkan parameter di akhir baris yang ada:

root=... quiet initcall_blacklist=simpledrm_platform_driver_init

Kemudian regenerasi boot configuration menggunakan tool bawaan Proxmox:

proxmox-boot-tool refresh

Restart Proxmox Host
#

Setelah konfigurasi disimpan dan boot config diperbarui, lakukan reboot penuh pada Proxmox host:

reboot

Setelah host kembali online, verifikasi bahwa GPU terdaftar konsisten di card0:

ls -la /dev/dri/

Outputnya seharusnya stabil dan GPU asli kamu akan selalu muncul sebagai card0.


Efek Samping yang Perlu Diketahui
#

Ada satu trade-off dari solusi ini: teks boot (splash screen) tidak akan muncul setelah memilih kernel di menu bootloader. Ini karena SimpleDRM memang bertanggung jawab untuk menampilkan output teks di layar selama fase awal boot sebelum driver GPU penuh aktif.

Jangan khawatir, Proxmox host tetap berjalan normal. Kamu masih bisa melihat log boot menggunakan:

dmesg | less
# atau
journalctl -b

Untuk keperluan homelab, ini bukan masalah besar karena kamu jarang perlu melihat tampilan boot secara langsung.


Verifikasi Hardware Transcoding di Jellyfin
#

Setelah host reboot, jalankan ulang LXC container Jellyfin dan pastikan tidak ada error saat startup. Kemudian verifikasi dari dalam container:

# Masuk ke LXC container
pct enter <CTID>

# Cek apakah /dev/dri/card0 tersedia
ls -la /dev/dri/

# Cek apakah Jellyfin bisa mengakses GPU
vainfo  # untuk Intel VA-API
# atau
radeontop  # untuk AMD

Di dashboard Jellyfin, masuk ke Dashboard > Playback > Transcoding dan pastikan hardware acceleration aktif dan tidak ada pesan error.


Kesimpulan
#

Error Task ERROR: Device /dev/dri/card0 does not exist pada Jellyfin LXC di Proxmox bukan disebabkan oleh konfigurasi LXC yang salah, melainkan oleh perilaku kernel Linux yang memuat SimpleDRM sebelum driver GPU asli aktif. Penomoran /dev/dri/card* menjadi tidak deterministik antara reboot.

Solusinya sederhana: tambahkan initcall_blacklist=simpledrm_platform_driver_init ke kernel boot parameter di Proxmox host, regenerasi boot config, lalu reboot. GPU akan selalu terdaftar secara konsisten setelahnya.

Solusi ini pertama kali dibagikan oleh komunitas di GitHub issue ProxmoxVE community-scripts #6270 dan terbukti efektif untuk berbagai setup GPU (Intel, AMD) di Proxmox.


Referensi
#

Terkait


Muat Komentar