Cara Mengganti Slot Aktif Secara Manual
Cara Mengganti Slot Aktif Secara Manual
Mengganti slot aktif pada ponsel dengan slot A/B biasanya hanya digunakan oleh updater untuk menginstal pembaruan OS baru (lihat android untuk detailnya).
Fungsionalitas ini juga sangat berguna jika Anda memiliki dua sistem operasi berbeda di ponsel dan ingin beralih di antara keduanya tanpa menginstal ulang.
Karena data di semua partisi yang bukan milik partisi A/B digunakan oleh kedua sistem operasi (yang ada di slot A dan slot B), fungsionalitas ini dibatasi oleh sistem operasi yang terinstal.
Data di sebagian besar partisi yang hanya ada satu kali harusnya dapat digunakan untuk semua sistem operasi (lihat android), tetapi ini tidak berlaku untuk data di partisi yang dipasang ke /data.
Mengganti slot aktif berfungsi jika OS (termasuk versi OS) yang terinstal di slot A dan B sama. Ini sebagian besar berfungsi jika OS yang terinstal di slot A dan B sama tetapi dengan versi OS yang berbeda.
Dan ini seharusnya berfungsi jika OS yang terinstal di slot A dan slot B menggunakan direktori yang berbeda di /data, misalnya di slot A terinstal OS berbasis Android dan di slot B OS yang tidak berbasis Android (misalnya postmarketOS).
Ini tidak berfungsi (sebagian besar waktu) jika ada distribusi Android yang berbeda di slot A dan B: misalnya, saya tidak berhasil jika OS di slot A adalah Android 12 asli dari ASUS dan OS di slot B adalah OmniROM 12. (Mungkin akan berfungsi setelah menghapus satu atau lebih direktori terkait OS dari /data tetapi saya tidak tahu yang mana - info tentang cara menggunakan OS ini secara paralel dipersilakan)
Instruksi di bawah ini dilakukan pada ASUS Zenfone 8 tetapi saya yakin ini harusnya berfungsi dengan ponsel lain yang memiliki slot A/B juga.
Harap dicatat bahwa Anda harus memiliki image TWRP yang berfungsi untuk ponsel Anda untuk memulihkan slot aktif jika terjadi masalah boot.
Untuk mendapatkan slot saat ini saat OS berjalan, gunakan perintah shell getprop, misalnya jalankan di shell di ponsel atau di shell adb:
root@ASUS_I006D:/ # getprop boot_suffix_aroot@ASUS_I006D:/ #Untuk mendapatkan slot aktif dalam mode fastboot atau saat ponsel di-boot ke dalam bootloader, jalankan di PC yang terhubung ke ponsel:
sudo fastboot getvar current-slotAda berbagai metode untuk mengganti slot aktif secara manual:
1. Mengganti slot menggunakan fastboot
Mengganti slot melalui fastboot berfungsi jika TWRP diinstal di partisi boot.
Untuk menggunakannya, hubungkan ponsel ke port USB PC dan jalankan perintah ini di PC:
# boot the phone into fastboot either if in the bootloader#sudo fastboot reboot fastboot## or if the phone is booteind into the recovery or in the normal mode#adb reboot fastboot# wait until the phone is booted in fastboot mode# get the current slot#sudo fastboot getvar current-slot# change the current slot#sudo fastboot set_active b# check the result#sudo fastboot getvar current-slot# reboot the phone from new current-slot#sudo fastboot rebootContoh:
[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot rebootRebooting OKAY [ 0.000s]Finished. Total time: 0.201s[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ adb reboot fastboot[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot getvar current-slotcurrent-slot: aFinished. Total time: 0.001s[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot set_active bSetting current slot to 'b' OKAY [ 0.042s]Finished. Total time: 0.043s[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot getvar current-slotcurrent-slot: bFinished. Total time: 0.000s[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot rebootRebooting OKAY [ 0.000s]Finished. Total time: 0.251s# check the result#[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ adb shell getprop boot_suffix_b[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$Catatan:
Mengganti slot aktif dalam mode fastboot tidak berfungsi jika image boot dari Android 12 asli dari ASUS atau dari OmniROM terinstal:
[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$ sudo fastboot set_active bSetting current slot to 'b' FAILED (remote: 'Unable to set slot')fastboot: error: Command failed[xtrnaw7@t15g /data/develop/android/scripts_on_linux]$Hal yang sama berlaku jika ponsel di-boot ke dalam bootloader:
[ OmniRomDev - xtrnaw7@t15g /data/develop/android/test ] $ sudo fastboot --set-active=aSetting current slot to 'a' FAILED (remote: 'Slot Change is not allowed in Lock State')fastboot: error: Command failed[ OmniRomDev - xtrnaw7@t15g /data/develop/android/test ] $Perhatikan bahwa mengubah status kunci melalui
fastboot flashing lock|unlockakan melakukan reset pabrik.
2. Mengganti slot menggunakan TWRP
Slot aktif untuk reboot berikutnya juga dapat diubah di dialog reboot dari TWRP.
Ini juga dapat dilakukan jika ponsel di-boot dari image TWRP.
Catatan:
Ini adalah fallback untuk membuat ponsel boot kembali jika reboot dari slot lain gagal karena alasan apa pun.
3. Mengganti slot melalui Magisk
Slot aktif juga dapat diubah di aplikasi Magisk. Ini digunakan untuk memperbarui partisi boot setelah OTA (lihat github untuk detailnya) tetapi juga dapat digunakan untuk mengubah slot aktif secara manual.
Buka aplikasi Magisk dan pilih tombol "install" untuk menginstal Magisk ke partisi boot. Di dialog berikutnya, gunakan metode "Install to inactive Slot (After OTA)".
Ini juga berfungsi jika tidak ada pembaruan (OTA) yang diinstal dan tidak mengubah konfigurasi Magisk - ini hanya mengganti file Magisk di partisi boot yang tidak aktif dan mengaktifkan partisi boot yang tidak aktif. Untuk me-reboot ponsel dari partisi yang sekarang aktif, tekan tombol "Reboot" setelah pembaruan partisi boot oleh Magisk selesai.
Tentu saja ini hanya berfungsi jika OS di kedua slot didukung oleh Magisk.
4. Menggunakan biner bootctl
Ada biner bernama bootctl yang dapat digunakan untuk mengganti slot aktif. Kode sumber bootctl adalah bagian dari sumber untuk OS Android tetapi sejauh yang saya tahu biner tidak dikompilasi secara default dan karena itu juga tidak diinstal di ponsel.
Tapi ada modul Magisk untuk menginstal biner bootctl; modul Magisk tersebut dapat diunduh dari:
github
Sayangnya versi saat ini dari modul Magisk dengan bootctl tidak diinstal dan berfungsi langsung di Android 12 atau OmniROM 12 untuk ASUS Zenfone 8. Oleh karena itu saya membuat versi yang dikoreksi dari modul Magisk.
Modul Magisk yang dikoreksi dapat diunduh di:
bnsmb
Changelog untuk modul Magisk yang dikoreksi untuk bootctl adalah:
Pembaruan 21.09.2022 /bs
- mengubah API versi maksimum di customize menjadi 32 sehingga modul dapat diinstal di Android 12
- mengganti nama biner menjadi bootctl
- menambahkan skrip wrapper bootctl untuk memulai bootctl karena direktori /vendor/lib64 dengan library yang diperlukan untuk biner tidak ada di jalur library default di Android 12
bootctl harus dijalankan oleh pengguna root di shell di ponsel atau di shell adb.
Untuk mengganti slot aktif dengan bootctl, gunakan:
bootctl set-active-boot-slot SLOTSLOT adalah 0 (untuk slot A) atau 1 (untuk slot B); reboot berikutnya akan boot dari slot tersebut. Untuk mendapatkan slot boot aktif dengan bootctl, gunakan:
bootctl get-current-slotCatatan:
Bantuan penggunaan untuk bootctl adalah:
root@ASUS_I006D:# bootctl -h./bootctl - command-line wrapper for the boot HAL: ./bootctl COMMANDCommands: hal-info - Show info about boot_control HAL used. get-number-slots - Prints number of slots. get-current-slot - Prints currently running SLOT. mark-boot-successful - Mark current slot as GOOD. get-active-boot-slot - Prints the SLOT to load on next boot. set-active-boot-slot SLOT - On next boot, load and execute SLOT. set-slot-as-unbootable SLOT - Mark SLOT as invalid. is-slot-bootable SLOT - Returns 0 only if SLOT is bootable. is-slot-marked-successful SLOT - Returns 0 only if SLOT is marked GOOD. get-suffix SLOT - Prints suffix for SLOT. set-snapshot-merge-status STAT - Sets whether a snapshot-merge of any dynamic partition is in progress. Valid STAT values are: none, unknown, snapshotted, merging, or cancelled. get-snapshot-merge-status - Prints the current snapshot-merge status parameter is the zero-based slot-number.Kode sumber untuk bootctl ada di:
googlesource+/master/bootctl/bootctl
googlesource+/master/include/hardware/boot_control.h
Ada juga aplikasi sederhana untuk mengganti slot aktif melalui biner bootctl: Switch-My-Slot-Android (github)
Perhatikan bahwa aplikasi hanya dapat diinstal setelah modul Magisk untuk bootctl diinstal.
Pemecahan Masalah
Jika Anda mendapatkan kesalahan seperti ini setelah reboot dari slot yang sebelumnya tidak aktif:
Cannot load Android System. Your data may be corrupt. if you continue o get this message, you may need to perform a factory data reset and erase all user data storeed on this device
atau jika ponsel hanya boot ke bootloader setelah reboot dari slot yang sebelumnya tidak aktif, boot ponsel dari image TWRP untuk mengaktifkan slot sebelumnya lagi.
Misalnya untuk ponsel ASUS Zenfone 8:
sudo fastboot boot /data/backup/ASUS_ZENFONE8/twrp/twrp-3.6.1_12-1-I006DKemudian di TWRP, pilih reboot ponsel dan di dialog reboot, alihkan slot kembali ke slot aktif sebelumnya. Anda dapat mengabaikan pesan kesalahan yang dicetak oleh TWRP setelah mengubah slot aktif - cukup lanjutkan reboot ponsel.
Catatan:
Pada ASUS Zenfone 8, tekan tombol Atas, Bawah, dan Daya secara bersamaan selama sekitar 10 detik atau lebih untuk mematikan ponsel. Setelah itu Anda dapat boot ke bootloader.
Riwayat
06.11.2022 /bs
Bagian tentang mengubah slot dalam mode fastboot tidak benar: mode fastboot dan mode bootloader adalah status ponsel yang berbeda.
06.11.2022 /bs (2)
Mengganti slot dalam mode fastboot hanya berfungsi jika TWRP diinstal di partisi boot.
12.01.2024 /bs
Dalam TWRP versi 3.7.0_12-1 untuk ASUS Zenfone 8, biner bootctl tidak lagi disertakan (biner bootctl adalah bagian dari image untuk TWRP 3.7.0_12-0 dan TWRP 3.6.1_12-1).
Catatan Tambahan dari Diskusi:
Jika terhubung melalui Wifi adb, Anda hanya dapat mengubah slot saat ini menggunakan perintah CLI saat OS Android berjalan. Dan sejauh yang saya tahu, mengubah slot aktif dalam sesi adb hanya dapat dilakukan oleh pengguna root.
Disarankan untuk mematikan ponsel, boot ponsel dari image pemulihan TWRP, cadangkan data Anda, lalu reboot OS Android lagi untuk menyelesaikan konfigurasi.
Platform Lainnya
Berita Piala Dunia
Jika Anda memiliki pertanyaan, silakan kirim email ke [email protected]