Проверка прошивки ТВ-бокса и бекап разделов


   ADB         Linux     

  • Подготовка к работе с Linux по SSH

  • Проверка загрузочной SD-карты

  • Проверка стоковой прошивки, хранящейся во внутренней eMMC-памяти приставки

  • Как сохранить резервные копии разделов eMMC

  • Как сделать бекап пользовательских данных




  • 1. Подготовка к работе с Linux по SSH

    Внимание ! Если у вас до сих пор нет ни загрузочной карты, ни даже файла образа Linux, то вам сюда: Скачать Armbian-server для H618

    Файл скачанного архива (можно даже без распаковки) записать на SD-карту программой USBImager.

    1. Записанную с помощью PhoenixCard загрузочную (StartUp) SD-карту c прошивкой Android вставить в USB-кардридер и подключить его к USB-порту приставки

    2. Записанную с помощью Usbimager SD-карту с образом Linux (серверная версия Armbian) вставить в слот (гнездо для SD-карты) приставки

    3. На ПК с Windows запустить программу MobaXTerm, в которой настроить SSH-сессию (настройка делается один раз).

    В приведенном примере: IP-адрес приставки = 192.168.0.129, порт = 22, имя сессии = Armbian Tanix







    4. Подать питание на приставку, в результате должен загрузиться Linux с карты. Если к приставке подключен по HDMI монитор (телевизор), то на нём отобразится лог процесса загрузки. Но для работы по SSH этот монитор не нужен, поэтому его можно не подключать.

    5. Открыть в MobaXTerm сессию с именем Armbian Tanix, щелкнув по соответствующему имени:




    6. Ввести логин root




    7. В результате произойдет подключение по SSH к линуксу на приставке, позволяющее работать с командной строкой (в правом окне), а также пользоваться продвинутым файловым менеджером (в левом окне)




    8. В файловом менеджере (в левом окне) перейти в папку /home и создать в ней рабочую папку, например, с именем box




    9. В терминале (правое окно) сделать эту папку текущей с помощью команды:

    cd /home/box



    10. На этом подготовительные операции закончены, можно приступать к главному, а именно, сохранению в файлы информации, хранящейся на загрузочных носителях. И много чего другому...

    11. Если в окне терминала ввести команду: ls /dev ,
    то получим такой результат (в примере показано не всё):


    root@transpeed-8k618-t:/home/box# ls /dev
    autofs           i2c-0         mmcblk2p10  net     sda21
    block            i2c-1         mmcblk2p11  null    sda22
    bsg              initctl       mmcblk2p12  port    sda23
    btrfs-control    input         mmcblk2p13  ppp     sda24
    bus              kmsg          mmcblk2p14  psaux   sda25
    cec0             lirc0         mmcblk2p15  ptmx   sda3
    char             log           mmcblk2p16  pts     sda4
    console          loop0         mmcblk2p17  random  sda5
    core             loop1         mmcblk2p18  rfkill  sda6
    cpu_dma_latency  loop2         mmcblk2p19  rtc     sda7
    cuse             loop3         mmcblk2p2   rtc0    sda8
    disk             loop4         mmcblk2p20  sda     sda9
    dma_heap         loop5         mmcblk2p21  sda1    sg0
    dri              loop6         mmcblk2p22  sda10   shm
    ecryptfs         loop7         mmcblk2p23  sda11   snd
    fb0              loop-control  mmcblk2p24  sda12   stderr
    fd               mapper        mmcblk2p25  sda13   stdin
    full             media0        mmcblk2p3   sda14   stdout
    fuse             mem           mmcblk2p4   sda15   sunxi_soc_info
    gpiochip0        mmcblk1       mmcblk2p5   sda16
    gpiochip1        mmcblk1p1     mmcblk2p6   sda17
    hidraw0          mmcblk2       mmcblk2p7   sda18
    hidraw1          mmcblk2boot0  mmcblk2p8   sda19   tty10
    hugepages        mmcblk2boot1  mmcblk2p9   sda2    tty11
    hwrng            mmcblk2p1     mqueue      sda20   tty12
    root@transpeed-8k618-t:/home/box#
    

    Здесь и сейчас нас будут интересовать только такие (выделены цветом):


  • mmcblk1 - SD-карта (вставленная в гнездо для карт), с которой загружен Linux
  • mmcblk1p1 - первый раздел этой карты


  • mmcblk2 - внутренняя флеш-память (eMMC) приставки, на которой хранится (и может с неё загружаться) стоковый образ Android.
  • mmcblk2p1 - mmcblk2p25 - физические разделы (partitions) на eMMC, всего их 25


  • sda - SD-карта, вставленная в кардридер, подключенный к USB-порту приставки. На этой карте записана загрузочная прошивка Android.
  • sda1 - sda25 - физические разделы (partitions) на этой карте, всего их 25

    Примечание. Не исключено, что SD-карта с Linux будет отображаться как mmcblk0, но это для наших целей не принципиально.


    2. Проверка загрузочной SD-карты

    1. Сделать текущей папку (если это не было сделано раньше) /home/box:
    raven:/ # cd /home/box


    2. Сохранить первые 32 блока (начало карты) в файл с именем usb32.img:
    root@transpeed-8k618-t:/home/box# dd if=/dev/sda of=usb32.img count=32
    32+0 records in
    32+0 records out
    16384 bytes (16 kB, 16 KiB) copied, 0.00469071 s, 3.5 MB/s


    3. Проверить наличие файла в папке /home/box
    root@transpeed-8k618-t:/home/box# ls
    usb32.img

    То же самое можно увидеть в файловом менеджере (в левом окне)


    4. Скопировать оба файла в выбранную папку на ПК, используя функцию Download файлового менеджера:





    5. О том, как интерпретировать эти файлы, рассказано здесь: Как интерпретировать сохраненные файлы.


    3. Проверка стоковой прошивки, хранящейся во внутренней eMMC-памяти приставки

    1. Сделать текущей папку (если это не было сделано раньше) /home/box:
    raven:/ # cd /home/box


    2. Сохранить первые 32 блока (начало карты) в файл с именем mmc32.img:
    root@transpeed-8k618-t:/home/box# dd if=/dev/mmcblk2 of=mmc32.img count=32
    32+0 records in
    32+0 records out
    16384 bytes (16 kB, 16 KiB) copied, 0.00430666 s, 3.8 MB/s


    3. Проверить наличие файла в папке /home/box
    root@transpeed-8k618-t:/home/box# ls
    mmc32.img
    То же самое можно увидеть в файловом менеджере (в левом окне)


    4. Скопировать файл в выбранную папку на ПК, используя функцию Download файлового менеджера:




    5. О том, как интерпретировать этот файл, рассказано здесь: Как интерпретировать сохраненные файлы.


    4. Как сохранить резервные копии разделов eMMC

    1. Всего на загрузочном носителе eMMC (это внутренняя флеш-память приставки) создано 25 физических раздела (partitions). Однако все их сохранять (а тем более - всю флеш-память) в файлы не нужно, т.к. для восстановления прошивки могут потребоваться только некоторые из них.
    Ниже приведен список таких разделов


    • mmcblk2p1 bootloader_a
    • mmcblk2p3 env_a
    • mmcblk2p5 boot_a
    • mmcblk2p7 vendor_boot_a
    • mmcblk2p9 super
    • mmcblk2p10 misc
    • mmcblk2p11 vbmeta_a
    • mmcblk2p13 vbmeta_system_a
    • mmcblk2p15 vbmeta_vendor_a
    • mmcblk2p17 frp
    • mmcblk2p19 metadata
    • mmcblk2p20 private
    • mmcblk2p21 dtbo_a
    • mmcblk2p23 media_data
    • mmcblk2p25 UDISK

    2. Команды, с помощью которых можно сохранить бекап этих разделов:


  • dd if=/dev/mmcblk2 of=start.img count=73728 (неразмеченная область eMMC)

  • dd if=/dev/mmcblk2p1 of=bootloader.img

  • dd if=/dev/mmcblk2p3 of=env.img

  • dd if=/dev/mmcblk2p5 of=boot.img

  • dd if=/dev/mmcblk2p7 of=vendor_boot.img

  • dd if=/dev/mmcblk2p9 of=super.img

  • dd if=/dev/mmcblk2p10 of=misc.img

  • dd if=/dev/mmcblk2p11 of=vbmeta.img

  • dd if=/dev/mmcblk2p13 of=vbmeta_system.img

  • dd if=/dev/mmcblk2p15 of=vbmeta_vendor.img

  • dd if=/dev/mmcblk2p17 of=frp.img

  • dd if=/dev/mmcblk2p19 of=metadata.img

  • dd if=/dev/mmcblk2p20 of=private.img

  • dd if=/dev/mmcblk2p21 of=dtbo.img

  • dd if=/dev/mmcblk2p23 of=media_data.img

  • dd if=/dev/mmcblk2p25 of=data.img

    Примечания.

  • 1. Некоторые из сохраненных файлов могут оказаться пустыми, т.е нулевой длины - это нормально
  • 2. Файлы больших разделов (особенно, раздел super !) будут сохраняться достаточно долго, поэтому наберитесь терпения и ждите завершения копирования.
  • 3. Раздел пользовательских данных (под номером 25) может оказаться о-о-очень большим, поэтому сохранять его в таком виде большого смысла нет. Проще смонтировать и извлечь из него нужные файлы простым копированием в файловом менеджере (подробности - позже).

    Размеры разделов можно посмотреть командой partx /dev/mmcblk2 (в столбце SIZE):


    root@transpeed-8k618-t:/home/box# partx /dev/mmcblk2
    NR   START      END  SECTORS  SIZE NAME            UUID
     1   73728   139263    65536   32M bootloader_a    a0085546-4166-744a-a353-fca9272b8e45
     2  139264   204799    65536   32M bootloader_b    a0085546-4166-744a-a353-fca9272b8e46
     3  204800   205311      512  256K env_a           a0085546-4166-744a-a353-fca9272b8e47
     4  205312   205823      512  256K env_b           a0085546-4166-744a-a353-fca9272b8e48
     5  205824   336895   131072   64M boot_a          a0085546-4166-744a-a353-fca9272b8e49
     6  336896   467967   131072   64M boot_b          a0085546-4166-744a-a353-fca9272b8e4a
     7  467968   533503    65536   32M vendor_boot_a   a0085546-4166-744a-a353-fca9272b8e4b
     8  533504   599039    65536   32M vendor_boot_b   a0085546-4166-744a-a353-fca9272b8e4c
     9  599040  6890495  6291456    3G super           a0085546-4166-744a-a353-fca9272b8e4d
    10 6890496  6923263    32768   16M misc            a0085546-4166-744a-a353-fca9272b8e4e
    11 6923264  6923519      256  128K vbmeta_a        a0085546-4166-744a-a353-fca9272b8e4f
    12 6923520  6923775      256  128K vbmeta_b        a0085546-4166-744a-a353-fca9272b8e50
    13 6923776  6923903      128   64K vbmeta_system_a a0085546-4166-744a-a353-fca9272b8e51
    14 6923904  6924031      128   64K vbmeta_system_b a0085546-4166-744a-a353-fca9272b8e52
    15 6924032  6924159      128   64K vbmeta_vendor_a a0085546-4166-744a-a353-fca9272b8e53
    16 6924160  6924287      128   64K vbmeta_vendor_b a0085546-4166-744a-a353-fca9272b8e54
    17 6924288  6925311     1024  512K frp             a0085546-4166-744a-a353-fca9272b8e55
    18 6925312  6956031    30720   15M empty           a0085546-4166-744a-a353-fca9272b8e56
    19 6956032  6988799    32768   16M metadata        a0085546-4166-744a-a353-fca9272b8e57
    20 6988800  7021567    32768   16M private         a0085546-4166-744a-a353-fca9272b8e58
    21 7021568  7025663     4096    2M dtbo_a          a0085546-4166-744a-a353-fca9272b8e59
    22 7025664  7029759     4096    2M dtbo_b          a0085546-4166-744a-a353-fca9272b8e5a
    23 7029760  7062527    32768   16M media_data      a0085546-4166-744a-a353-fca9272b8e5b
    24 7062528  7095295    32768   16M Reserve0        a0085546-4166-744a-a353-fca9272b8e5c
    25 7095296 30785502 23690207 11.3G userdata        a0085546-4166-744a-a353-fca9272b8e5d
    

    Чтобы получить доступ к разделу пользовательских данных (userdata) для копирования и сохранения файлов, достаточно смонтировать раздел userdata на предварительно созданную папку (в примере ниже - с именем qqq):

    root@transpeed-8k618-t:/home/box# mount /dev/mmcblk2p25 qqq

    После этого его содержимое становится доступным в файловом менеджере:




    Продолжение окна файлового менеджера (после прокрутки)



    Например, содержимое папки, которая в андроиде имеет имя sdcard (в ней все стандартные папки), можно увидеть в папке media/0:




    Аналогичным образом можно смонтировать и получить доступ к файлам, содержащихся в разделе bootloader (это набор графических файлов для загрузчика U-Boot).

    Однако смонтировать и получить таким образом доступ к системным разделам (system, product, vendor) подобным способом не удастся, т.к. эти разделы являются динамическими (логическими) и находятся внутри физического раздела super. Поэтому потребуется его предварительная распаковка, а затем уже - монтирование.
    Но об этом - в другой раз, чтобы окончательно не запутать читателей...

    И в заключение - лог сохранения почти всех (кроме super и userdata) файлов:
    (можно просто скопировать и вставить копипастом в терминале список всех этих команд )


    dd if=/dev/mmcblk2    of=start.img count=73728
    dd if=/dev/mmcblk2p1  of=bootloader.img
    dd if=/dev/mmcblk2p3  of=env.img
    dd if=/dev/mmcblk2p5  of=boot.img
    dd if=/dev/mmcblk2p7  of=vendor_boot.img
    dd if=/dev/mmcblk2p10 of=misc.img
    dd if=/dev/mmcblk2p11 of=vbmeta.img
    dd if=/dev/mmcblk2p13 of=vbmeta_system.img
    dd if=/dev/mmcblk2p15 of=vbmeta_vendor.img
    dd if=/dev/mmcblk2p17 of=frp.img
    dd if=/dev/mmcblk2p19 of=metadata.img
    dd if=/dev/mmcblk2p20 of=private.img
    dd if=/dev/mmcblk2p21 of=dtbo.img
    dd if=/dev/mmcblk2p23 of=media_data.img
    

    Для копирования сохраненных файлов на ПК удобно воспользоваться функцией Download встроенного в MobaXTerm файлового менеджера в этой же сессии SSH.







    Для того, чтобы собрать все эти файлы бекапа в один архивный файл, удобно воспользоваться командой:
    tar -cf bakup.tar *

    И потом отправить файл bakup.tar с помощью Download на ПК.


    5. Как сделать бекап пользовательских данных

    Все пользовательские данные (установленные приложения, их настройки, файлы данных и т.д.) хранятся на загрузочном носителе (SD или eMMMC) в разделе с именем userdata, который в прошивках Android 12 имеет номер 25.

    Размер этого раздела составляет всё свободное (от остальных раделов) место загрузочного носителя. Поэтому для типичной емкости карты или eMMMC, равной 32 Гб размер раздела userdata тоже превышает 20 - 25 Гб. При этом его реальнное полезное содержимое может быть существенно меньше (без пользовательских файлов данных это может быть лишь порядка 1 Гб). Понятно, что копировать командой dd весь раздел целиком в огромный файл (по аналогии с другими разделами) нет никакого смысла.

    Ниже приведено два варианта действий:

  • сохранение в файл архива с пользовательскими данными
  • клонирование пользовательских данных на новую приставку (или после сброса к заводским). Оба варианта предполагают использование загрузочной карты с линуксом (Armbian).

    Продолжение этой инструкции предполагает, что выполнены все подготовительные действия, описанные здесь: Подготовка к работе с Linux.

    Конечно, если к приставке подключена клавиатура и монитор (или телевизор), то для ввода команд можно пользоваться консолью, которая отображается на экране монитора. Но вариант работы с ПК по SSH более удобен, т.к в интефейсе MobaXTerm имеются встроенные файловый менеджер, редактор текста и много чего другого.

    Итак, имеется такая конфигураци: приставка Tanix Tx68, на которой запущен серверный Armbian с загрузочной карты, на ПК запущен XMobaTerm, в котором открыт сеанс с подключение по SSH к этому серверу. Кроме того, в USB-слот приставки может быть подключен кардридер, в который вставлена загрузочная карта с прошивкой Android.

    Дальше приводятся пошаговые инструкции для описанной конфигурации. Когда речь будет идти о работе с файлами, то предполагается, что они будут выполнены либо с помощью файлового менеджера либо консольными командами.


    Создание архива пользовательских данных

    1. Перейти в папку home, создать в ней рабочую папку (например, с именем arch) и сделать её текущей:

    root@transpeed-8k618-t:~# cd /home
    root@transpeed-8k618-t:/home# mkdir arch
    root@transpeed-8k618-t:/home# cd arch
    root@transpeed-8k618-t:/home/arch#
    


    2. Посмотреть список устройств и их разделов

    root@transpeed-8k618-t:/home/arch# ls /dev
    autofs           i2c-0         mmcblk2p10  net     sda21           tty13  tty36  tty59    vcs5
    block            i2c-1         mmcblk2p11  null    sda22           tty14  tty37  tty6     vcs6
    bsg              initctl       mmcblk2p12  port    sda23           tty15  tty38  tty60    vcsa
    btrfs-control    input         mmcblk2p13  ppp     sda24           tty16  tty39  tty61    vcsa1
    bus              kmsg          mmcblk2p14  psaux   sda25           tty17  tty4   tty62    vcsa2
    cec0             lirc0         mmcblk2p15  ptmx    sda3            tty18  tty40  tty63    vcsa3
    char             log           mmcblk2p16  pts     sda4            tty19  tty41  tty7     vcsa4
    console          loop0         mmcblk2p17  random  sda5            tty2   tty42  tty8     vcsa5
    core             loop1         mmcblk2p18  rfkill  sda6            tty20  tty43  tty9     vcsa6
    cpu_dma_latency  loop2         mmcblk2p19  rtc     sda7            tty21  tty44  ttyS0    vcsu
    cuse             loop3         mmcblk2p2   rtc0    sda8            tty22  tty45  ttyS2    vcsu1
    disk             loop4         mmcblk2p20  sda     sda9            tty23  tty46  ttyS3    vcsu2
    dma_heap         loop5         mmcblk2p21  sda1    sg0             tty24  tty47  ttyS4    vcsu3
    dri              loop6         mmcblk2p22  sda10   shm             tty25  tty48  ttyS5    vcsu4
    ecryptfs         loop7         mmcblk2p23  sda11   snd             tty26  tty49  udmabuf  vcsu5
    fb0              loop-control  mmcblk2p24  sda12   stderr          tty27  tty5   uhid     vcsu6
    fd               mapper        mmcblk2p25  sda13   stdin           tty28  tty50  uinput   vhci
    full             media0        mmcblk2p3   sda14   stdout          tty29  tty51  uleds    video0
    fuse             mem           mmcblk2p4   sda15   sunxi_soc_info  tty3   tty52  urandom  video1
    gpiochip0        mmcblk1       mmcblk2p5   sda16   tty             tty30  tty53  v4l      watchdog
    gpiochip1        mmcblk1p1     mmcblk2p6   sda17   tty0            tty31  tty54  vcs      watchdog0
    hidraw0          mmcblk2       mmcblk2p7   sda18   tty1            tty32  tty55  vcs1     zero
    hidraw1          mmcblk2boot0  mmcblk2p8   sda19   tty10           tty33  tty56  vcs2     zram0
    hugepages        mmcblk2boot1  mmcblk2p9   sda2    tty11           tty34  tty57  vcs3     zram1
    hwrng            mmcblk2p1     mqueue      sda20   tty12           tty35  tty58  vcs4     zram2
    root@transpeed-8k618-t:/home/arch#
    

    Нас будут интересовать :

  • /dev/mmcblk2p25 - это раздел userdata на встроенной флеш-памяти eMMC приставки
  • /dev/sda25 - это раздел userdata на загрузочной карте с Android (если она подключена)


    3. Создать папку для монтирования раздела, например, с именем databak:

    root@transpeed-8k618-t:/home/arch# mkdir databak
    


    4. Смонтировать в эту созданную папку радел userdata:

    root@transpeed-8k618-t:/home/arch# mount /dev/mmcblk2p25 databak
    

    Для того, чтобы узнать, как используется память раздела userdata:
    Размер в гигабайтах:

    root@transpeed-8k618-t:/home/arch# df -h /dev/mmcblk2p25
    Filesystem       Size  Used Avail Use% Mounted on
    /dev/mmcblk2p25   12G  3.0G  8.3G  27% /home/arch/databak
    
    Размер в 1 Kb блоках:
    root@transpeed-8k618-t:/home/arch# df  /dev/mmcblk2p25
    Filesystem       1K-blocks Used     Available Use%   Mounted on
    /dev/mmcblk2p25  11843052  3144832  8698220    27% /home/arch/databak
    

    Таким образом, из общего размера раздела в 12 Gb полезная информация занимает лишь 3 Gb. Поэтому в случае использования для копирования команды dd будет достаточно указать реальное значение в её аргументе count, например, bs=1k count=3144832 или bs=1G count=3

    Примечание. Если раздел не смонтирован, то команда df покажет такой размер:
    root@transpeed-8k618-t:/home/arch# df /dev/mmcblk2p25
    Filesystem     1K-blocks  Used Available Use% Mounted on
     udev           940724     0    940724   0%    /dev
    

    5. Теперь мы имеем доступ к файлам userdata, в чем легко убедиться командой ls (или в файловом менеджере):

    root@transpeed-8k618-t:/home/arch# ls databak
    adb            audio_d        gsi                  misc_de         rollback-history           user
    anr            backup         gsi_persistent_data  nfc             rollback-observer          user_de
    apex           bootchart      incremental          ota             server_configurable_flags  vendor
    app            cache          local                ota_package     ss                         vendor_ce
    app-asec       dalvik-cache   lost+found           per_boot        system                     vendor_de
    app-ephemeral  data           media                preloads        system_ce
    app-lib        disp_firmware  mediadrm             property        system_de
    app-private    drm            misc                 resource-cache  tombstones
    app-staging    fonts          misc_ce              rollback        unisoc_dbg
    


    6. Остался последний шаг: создать tar-архив этой папки:

    root@transpeed-8k618-t:/home/arch# tar -c -f databak.tar databak
    tar: databak/vendor/wifi/wpa/sockets/wlan0: socket ignored
    tar: databak/vendor/wifi/wpa/sockets/p2p-dev-wlan0: socket ignored
    tar: databak/system/unsolzygotesocket: socket ignored
    tar: databak/system/ndebugsocket: socket ignored
    

    ВНИМАНИЕ ! Архивация может выполняться достаточно долго (несколько минут), нужно ждать появления приглашения консоли. Или запускать команду с параметром -v для вывода сообщений о процессе архивирования:

     tar -c -v -f databak.tar databak 


    7. Проверяем, что файл архива databak.tar создан успешно:

    root@transpeed-8k618-t:/home/arch# ls
    databak  databak.tar
    

    Теперь можно (если нужно сохранить) скопировать этот файл архива по SSF на ПК прямо в файловом менеджере XMobaterm с помощью процедуры download.

    В реальных условиях процедура создания такого архива может понадобиться перед выполнением на устройстве сброса к заводским с полной очисткой (такая необходимость иногда возникает). Поэтому оставшийся на карте с Armbian (в папке arch) файл архива можно использовать для обратного разархивирования, повторно загрузившись с этой карты после процедуры сброса.


    Восстановление пользовательских данных

    8. Для восстановления пользовательских данных userdata (после сброса или для клонирования) достаточно, находясь в папке arch, выполнить команду:

    root@transpeed-8k618-t:/home/arch# ls
    databak  databak.tar
    
    root@transpeed-8k618-t:/home/arch# tar -x -v -f databak.tar
    databak/
    databak/bootchart/
    databak/vendor/
    databak/vendor/hardware/
    databak/vendor/hardware/audio_d/
    databak/vendor/tombstones/
       ....
    databak/disp_firmware
    databak/per_boot/
    root@transpeed-8k618-t:/home/arch#
    
    
    Или выполнить команду без аргумента -v для отключения вывода соощений (очень длинного списка копируемых файлов).


    9. Для клонирования пользовательских данных на несколько одинаковых приставок из коробки достаточно поочередно вставлять в каждую из них эту подготовленную карту с Armbian, содержащую tar-архив, загружать систему с этой карты, а затем выполнять пункты 1, 4, 8 данной инструкции (сделать папку arch текущей, смонтировать раздел на папку databak и разархивировать файл databak.tar).