ساقه ماهی: عکس فوری و بازیابی

اندروید ۱۵ نحوه گرفتن اسنپ‌شات و بازیابی اسنپ‌شات از یک دستگاه مجازی Cuttlefish را معرفی می‌کند. گرفتن اسنپ‌شات از یک دستگاه Cuttlefish به شما امکان می‌دهد وضعیت دستگاه را در یک تصویر روی دیسک ذخیره کنید. سپس می‌توانید اسنپ‌شات را بازیابی کنید تا یک دستگاه Cuttlefish به وضعیت ذخیره شده قبلی خود بازگردد.

شما می‌توانید از اسنپ‌شات‌ها در گردش‌های کاری مختلف خودکار یا دستی استفاده کنید. هنگام انجام روشی که دستگاه را تغییر می‌دهد، می‌توانید از دستگاه یک اسنپ‌شات بگیرید تا مطمئن شوید که می‌توانید دستگاه را به حالت مشخص‌شده برگردانید. به عنوان مثال، هنگام اجرای مجموعه‌های آزمایشی که وضعیت دستگاه را تغییر می‌دهند و می‌توانند به طور بالقوه باعث ایجاد مشکلات یا بی‌ثباتی در آزمایش‌های بعدی شوند، می‌توانید یک اسنپ‌شات بگیرید تا بتوانید دستگاه را پس از آزمایش به حالت ذخیره‌شده بازگردانید و اطمینان حاصل کنید که آزمایش‌های بعدی به درستی اجرا می‌شوند.

نمونه دیگری از گردش کاری که در آن اسنپ‌شات‌ها مفید هستند، هنگام آزمایش رفتار یک برنامه است. هنگام آزمایش رفتار یک برنامه بر اساس مجموعه‌ای از اقدامات، می‌توانید بین اقدامات در حین اجرای برنامه، یک اسنپ‌شات بگیرید تا بتوانید بدون نیاز به راه‌اندازی مجدد از ابتدا، به آن اسنپ‌شات برگردید. به عنوان مثال، اگر اجرای یک بازی زمان زیادی برای بالا آمدن دارد، می‌توانید پس از رسیدن به منوی اصلی یک اسنپ‌شات بگیرید تا بتوانید دستگاه را به آن حالت برگردانید و زمان بالا آمدن را نادیده بگیرید.

از دستگاه Cuttlefish عکس بگیرید

هنگام گرفتن Snapshot از یک دستگاه، دستگاه Cuttlefish باید به حالت تعلیق درآید تا از پایداری آن اطمینان حاصل شود. وقتی دستگاه به حالت تعلیق در می‌آید، تمام vCPUها و دستگاه‌ها متوقف می‌شوند و تمام بافرها وضعیت خود را به ماشین مجازی ارسال می‌کنند. سپس Snapshot وضعیت vCPU، حافظه و وضعیت دستگاه را در دیسک و در پوشه مقصد مشخص شده ذخیره می‌کند.

VirtiosFS پشتیبانی نمی‌شود و باید هنگام گرفتن اسنپ‌شات غیرفعال شود. برای غیرفعال کردن VirtioFS، هنگام اجرای cvd create یا cvd start ، آرگومان --enable_virtiofs=false را ارسال کنید.

فقط حالت پردازنده گرافیکی SwiftShader ( guest_swiftshader ) برای اسنپ‌شات‌ها پشتیبانی می‌شود. سایر حالت‌های گرافیکی شتاب‌یافته پشتیبانی نمی‌شوند.

مراحل زیر فرآیند راه‌اندازی دستگاه Cuttlefish و گرفتن snapshot را شرح می‌دهد.

  1. یک دستگاه را راه‌اندازی کنید، در حالی که VirtioFS را غیرفعال می‌کنید. (سپس می‌توانید از دستگاه استفاده کنید.)

    cvd create --enable_virtiofs=false --gpu_mode=guest_swiftshader
  2. با اجرای cvd snapshot_take و با استفاده از پرچم‌های زیر، یک اسنپ‌شات بگیرید:

    • --force : اگر پوشه‌ای در مسیر snapshot مشخص شده وجود داشته باشد، این پرچم تضمین می‌کند که پوشه موجود حذف شده و یک پوشه جدید در مسیر snapshot حاوی snapshot ایجاد می‌شود.

    • --auto_suspend : دستگاه را قبل از گرفتن اسنپ‌شات به حالت تعلیق درمی‌آورد و پس از گرفتن اسنپ‌شات، دستگاه را دوباره راه‌اندازی می‌کند.

    • --snapshot_path : مسیر مشخص شده‌ای که پوشه جدید حاوی اسنپ‌شات در آن ایجاد می‌شود.

    cvd snapshot_take --force --auto_suspend \
    --snapshot_path=PATH

دستگاه Cuttlefish را بازیابی کنید

هنگام بازیابی اسنپ‌شات دستگاه Cuttlefish، نمونه Cuttlefish که اسنپ‌شات برای آن گرفته شده است باید متوقف شود. اگر نمونه از قبل متوقف شده باشد، هیچ اقدام دیگری لازم نیست و اسنپ‌شات قابل بازیابی است.

برای بازیابی اسنپ‌شات از یک دستگاه Cuttlefish، دستگاهی را با cvd create اجرا کنید و مسیر اسنپ‌شات را وارد کنید. اگر شماره نمونه پایه دستگاه Cuttlefish که اسنپ‌شات روی آن گرفته شده با شماره نمونه پایه نمونه فعلی Cuttlefish متفاوت است، آن شماره نمونه پایه را با استفاده از فلگ --base_instance_num ارسال کنید.

cvd create --snapshot_path=PATH \
--base_instance_num=ID

دستگاه Cuttlefish را معلق کنید

شما می‌توانید یک دستگاه Cuttlefish را بدون گرفتن Snapshot به حالت تعلیق درآورید (هیچ فضایی از دیسک برای ذخیره وضعیت استفاده نمی‌شود). برای تعلیق یک دستگاه Cuttlefish، دستور زیر را اجرا کنید:

cvd suspend

دستگاه Cuttlefish را از سر بگیرید

برای از سرگیری دستگاه Cuttlefish که به حالت تعلیق درآمده است، دستور زیر را اجرا کنید:

cvd resume

اعتبارسنجی ویژگی Snapshot/Restore

قابلیت Snapshot/Restore را می‌توان با اجرای تست زیر اعتبارسنجی کرد:

atest SnapshotTest