snapshotctl Управление мгновенными снимками Тип файла: команда snapshotctl: Control snapshots. usage: snapshotctl [action] [flags] Actions: dump Print snapshot states. merge Deprecated. Комментарии ---------------------------------------- Мгновенный снимок (англ. snapshot) — моментальная копия хранимых данных — файлов и каталогов файловой системы, базы данных или её части на определённый момент времени. В отличие от резервной копии, создание которой для большого объёма данных может занять длительное время и требовать остановки изменений (чтобы обеспечить целостность сохраняемых данных), мгновенный снимок позволяет единомоментно зафиксировать состояние хранимых объектов. При этом снимок обычно не создаёт независимую копию данных в подсистеме хранения, а лишь обеспечивается алгоритмами записи изменений таким образом, чтобы сохранялась возможность обратиться к данным на момент создания мгновенного снимка. Такая схема позволяет организовать целостное резервное копирование большого объёма данных без останова служб, изменяющих данные — резервная копия снимается с зафиксированного мгновенного снимка. Широкое применение мгновенные снимки находят в системах резервного копирования, сетях хранения данных, СУБД, виртуальном хостинге, для организации «песочниц». Поддержка мгновенных снимков реализована в различных менеджерах томов Unix-систем, в том числе LVM. ------------------------------------- https://blog.csdn.net/guyongqiangx/article/details/129122159 1. Функции snapshotctl В более ранней версии (android-11.0.0_r21) snapshotctl поддерживает операции дампа и сопоставления (map), а затем добавлены операции удаления. Справочная информация для snapshotctl: console:/ # snapshotctl -h snapshotctl: Control snapshots. Usage: snapshotctl [action] [flags] Actions: dump Print snapshot states. merge Deprecated. map Map all partitions at /dev/block/mapper 2. Операция Dump Операция дампа является наиболее полезной операцией snapshtctl, которая может выводить различные состояния при обновлении системы. Пример нормального дампа: console:/ # snapshotctl dump snapshotctl W 10-10 21:43:54 3770 3770 snapshot.cpp:247] Cannot read /metadata/ota/snapshot-boot: No such file or directory Update state: initiated Compression: 0 Current slot: _a Boot indicator: booting from unknown slot Rollback indicator: No such file or directory Forward merge indicator: No such file or directory Source build fingerprint: google/xxxxx/xxxxx:11/RVC/eng.rocky.20221010.210616:userdebug/dev-keys Snapshot: system_b state: CREATED device size (bytes): 1263079424 snapshot size (bytes): 1263079424 cow partition size (bytes): 119177216 cow file size (bytes): 949866496 allocated sectors: 0 metadata sectors: 0 compression: none Snapshot: vendor_b state: CREATED device size (bytes): 80506880 snapshot size (bytes): 80506880 cow partition size (bytes): 0 cow file size (bytes): 978944 allocated sectors: 0 metadata sectors: 0 compression: none Пример запуска утилиты на ТВ-боксе: console:/ # snapshotctl dump snapshotctl E 07-13 11:20:33 3501 3501 snapshot.cpp:2518] Read state file failed: No such file or directory snapshotctl E 07-13 11:20:33 3501 3501 snapshot.cpp:2518] Read state file failed: No such file or directory snapshotctl W 07-13 11:20:33 3501 3501 snapshot.cpp:214] Cannot read /metadata/ota/snapshot-boot: No such file or directory Update state: none Compression: 0 Current slot: _a Boot indicator: booting from unknown slot Rollback indicator: No such file or directory Forward merge indicator: No such file or directory Source build fingerprint: console:/ # 3. Oперация Map snapshotctl map позволяет сопоставить различные файлы base, cow и cow-img в системе с устройствами для удобной проверки во время операций. Вот пример отображения: console:/ # snapshotctl map snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2525] Successfully unmapped snapshot system_b snapshotctl I 10-11 19:59:53 6127 6127 fs_mgr_dm_linear.cpp:247] [libfs_mgr] Created logical partition system_b-base on device /dev/block/dm-4 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:638] Mapped system_b-cow-img to /dev/block/dm-5 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2596] Mapped COW device for system_b at /dev/block/dm-6 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2490] Mapped system_b as snapshot device at /dev/block/dm-7 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2525] Successfully unmapped snapshot vendor_b snapshotctl I 10-11 19:59:53 61[10577.688566] audit: rate limit exceeded 27 6127 fs_mgr_dm_linear.cpp:247] [libfs_mgr] Created logical partition vendor_b-base on device /dev/block/dm-8 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:638] Mapped vendor_b-cow-img to /dev/block/dm-9 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2556] Mapped COW image for vendor_b at vendor_b-cow-img snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2490] Mapped vendor_b as snapshot device at /dev/block/dm-10 snapshotctl I 10-11 19:59:53 6127 6127 snapshot.cpp:2741] MapAllSnapshots succeeded. На ТВ-боксе: console:/ # snapshotctl map snapshotctl E 07-13 11:28:44 3546 3546 snapshot.cpp:2518] Read state file failed: No such file or directory snapshotctl E 07-13 11:28:44 3546 3546 snapshot.cpp:2335] Cannot call MapAllSnapshots from update state: 0 70|console:/ # 4 Приведенная выше операция Map сопоставляет следующие файлы: console:/ # ls -lh data/gsi/ota/ total 454M -rw------- 1 root root 26 2022-10-11 00:00 system_b-cow-img.img -rw------- 1 root root 906M 2022-10-11 00:00 system_b-cow-img.img.0000 -rw------- 1 root root 26 2022-10-11 00:00 vendor_b-cow-img.img -rw------- 1 root root 956K 2022-10-11 00:00 vendor_b-cow-img.img.0000 Если суперпространство выделено для апгрейда, то оно тоже будет маппировано. После сопоставления раздела можyj использовать другие инструменты для проверки обновленного образа, например, использовать инструмент dmctl для просмотра состояния сопоставления следующим образом: console:/ # dmctl usage: dmctl <command> [command options] dmctl -f file commands: create <dm-name> [-ro] <targets...> delete <dm-name> list <devices | targets> [-v] getpath <dm-name> getuuid <dm-name> info <dm-name> status <dm-name> resume <dm-name> suspend <dm-name> table <dm-name> help -f file reads command and all parameters from named file Target syntax: <target_type> <start_sector> <num_sectors> [target_data] 234|console:/ # dmctl table Invalid arguments, see 'dmctl help' 234|console:/ # su console:/ # dmctl list devices Available Device Mapper Devices: userdata : 252:3 system_b : 252:7 vendor_b : 252:10 vendor_b-base : 252:8 system_a : 252:0 vendor_b-cow-img : 252:9 vendor_a : 252:1 system_b-base : 252:4 system_b-cow-img : 252:5 system_b-cow : 252:6 scratch : 252:2 console:/ # console:/ # dmctl info vendor_b-base device : vendor_b-base active : true access : rw activeTable : true inactiveTable : false bufferFull : false console:/ # console:/ # dmctl info vendor_b-cow-img device : vendor_b-cow-img active : true access : rw activeTable : true inactiveTable : false bufferFull : false console:/ # console:/ # console:/ # dmctl table vendor_b-cow-img Targets in the device-mapper table for vendor_b-cow-img: 0-1912: linear, 259:4 6107136 console:/ # console:/ # dmctl table system_b-cow Targets in the device-mapper table for system_b-cow: 0-888: linear, 259:3 2469000 888-232768: linear, 259:3 2627128 232768-2087976: linear, 252:5 0 console:/ # console:/ # dmctl table system_b-cow-img Targets in the device-mapper table for system_b-cow-img: 0-4096: linear, 259:4 569344 4096-8192: linear, 259:4 675840 8192-12288: linear, 259:4 1134592 12288-16384: linear, 259:4 1155072 16384-20480: linear, 259:4 1179648 20480-28672: linear, 259:4 1187840 28672-65536: linear, 259:4 1200128 65536-69632: linear, 259:4 1253376 69632-73728: linear, 259:4 1269760 73728-77824: linear, 259:4 1302528 77824-86016: linear, 259:4 1318912 86016-102400: linear, 259:4 1351680 102400-106496: linear, 259:4 1376256 106496-118784: linear, 259:4 1384448 118784-131072: linear, 259:4 1466368 131072-155648: linear, 259:4 1482752 155648-159744: linear, 259:4 1515520 159744-163840: linear, 259:4 1699840 163840-172032: linear, 259:4 1712128 172032-176128: linear, 259:4 1773568 176128-184320: linear, 259:4 1867776 184320-192512: linear, 259:4 2097152 192512-196608: linear, 259:4 2109440 196608-204800: linear, 259:4 2134016 204800-208896: linear, 259:4 2158592 208896-212992: linear, 259:4 2170880 212992-217088: linear, 259:4 2187264 217088-221184: linear, 259:4 2215936 221184-225280: linear, 259:4 2244608 225280-249856: linear, 259:4 2310144 249856-253952: linear, 259:4 2355200 253952-294912: linear, 259:4 2449408 294912-311296: linear, 259:4 2912256 311296-323584: linear, 259:4 4030464 323584-372736: linear, 259:4 4050944 372736-376832: linear, 259:4 4149248 376832-385024: linear, 259:4 4165632 385024-389120: linear, 259:4 4325376 389120-516096: linear, 259:4 4620288 516096-557056: linear, 259:4 4751360 557056-565248: linear, 259:4 4796416 565248-1855208: linear, 259:4 4812800 console:/ # Вы можете snapshotctl unmap размонтировать ранее сопоставленные разделы через . console:/ # snapshotctl unmap snapshotctl I 10-11 19:59:48 6120 6120 snapshot.cpp:2525] Successfully unmapped snapshot system_b snapshotctl I 10-11 19:59:48 6120 6120 snapshot.cpp:2525] Successfully unmapped snapshot vendor_b console:/ # 12345. операция слияния В настоящее время операция слияния в инструменте snapshotctl console:/ # snapshotctl W 10-11 19:43:10 5986 5986 snapshotctl.cpp:66] Deprecated. Call update_engine_client --merge instead. 70|console:/ # snapshotctl merge отменена Если вам нужно выполнить слияние, вы можете использовать команду: update_engine_client --merge Поэтому, если есть проблема с обновлением виртуального раздела, вы можете сначала проверить snapshotctl dump некоторую основную информацию snapshotctl map, а затем проверить, сопоставив все устройства виртуального раздела. |