সফ্ট রিস্টার্ট (<= AOSP 14)

Android 11 সফ্ট রিস্টার্ট কাজ করে, যা হল ব্যবহারকারীর স্পেসে প্রসেস রানটাইম রিস্টার্ট করা যা আপডেট প্রয়োগ করতে ব্যবহার করা হয় যেগুলির রিবুট করার প্রয়োজন হয় (যেমন, APEX প্যাকেজে আপডেট)। বর্তমানে, userdata মাউন্ট করার পরে শুরু হওয়া প্রসেসের ক্ষেত্রে সফ্ট রিস্টার্ট সীমিত।

নিম্নলিখিত উপায়ে সফট রিস্টার্ট করার অনুরোধ করা হয়:

  • PowerManager থেকে, PowerManager.reboot(PowerManager.REBOOT_USERSPACE)-এ কল করে

  • adb shell svc power reboot userspace বা adb reboot userspace ব্যবহার করে শেল থেকে

সফ্ট রিস্টার্টের পরে, এনক্রিপ্ট করা ক্রেডেনশিয়াল স্টোরেজ আনলক করা থাকে।

কোনও ডিভাইসে সফট রিস্টার্ট কাজ করলে, PowerManager.isRebootingUserspace() API পদ্ধতি true রিটার্ন করে এবং সিস্টেম প্রপার্টি init.userspace_reboot.is_supported-এর মান 1-এর সমান হয়।

ডিভাইসে সফট রিস্টার্টের সুবিধা না থাকলে, PowerManager.reboot(PowerManager.REBOOT_USERSPACE), adb reboot userspace এবং adb shell svc power reboot userspace-এ কল করা যাবে না।

সফ্ট রিস্টার্ট এক্সিকিউশন

সফ্ট রিস্টার্টের অনুরোধ করা হলে (PowerManager-এর মাধ্যমে বা শেল থেকে), init নিম্নলিখিত ধাপগুলি সম্পূর্ণ করে:

  1. sys.powerctl=reboot,userspace রিসিভ করে।

  2. সফ্ট রিস্টার্ট মনিটর করার জন্য একটি আলাদা UserspaceRebootWatchdogThread() প্রসেস ফর্ক করে।

  3. userspace-reboot-requested অ্যাকশন ট্রিগার করে, যা সফ্ট রিস্টার্টে প্রভাব ফেলতে পারে এমন সব সিস্টেম প্রপার্টি রিসেট করে। প্রভাবিত প্রপার্টি:

    • sys.usb.config
    • sys.usb.state
    • sys.boot_completed
    • dev.bootcomplete
    • sys.init.updatable_crashing
    • sys.init.updatable_crashing_process_name
    • apexd.status
    • sys.user.0.ce_available
    • sys.shutdown.requested
    • service.bootanim.exit

    বুট সিকোয়েন্সের সময় উপরের প্রপার্টি আবার সেট করতে হবে। প্রয়োজন হলে, আপনি অতিরিক্ত প্রপার্টি রিসেট করতে পারবেন। যেমন, rootdir/init.rc-এ on userspace-reboot-requested অ্যাকশন দেখুন।

  4. DoUserspaceReboot ফাংশন রান করে, যা নিম্নলিখিত অ্যাকশনগুলি পারফর্ম করে:

    1. userdata মাউন্ট করার পরে শুরু হওয়া প্রসেসে SIGTERM পাঠায় এবং সেগুলি বন্ধ হওয়ার জন্য অপেক্ষা করে।
    2. টাইম-আউট হয়ে গেলে, কোনও প্রসেস চালু থাকলে তা বন্ধ করতে SIGKILL পাঠায়।
    3. /system/bin/vdc volume reset-কে কল করুন।
    4. zRAM ব্যাক-আপ ডিভাইস আনমাউন্ট করে।
    5. অ্যাক্টিভ APEX প্যাকেজ আনমাউন্ট করে।
    6. আবার বুটস্ট্র্যাপ মাউন্ট নেমস্পেসে পরিবর্তন করে।
    7. userspace-reboot-resume অ্যাকশন ট্রিগার করে।

সফ্ট রিস্টার্টের আগে ফাইল সিস্টেম চেকপয়েন্টিংয়ের অনুরোধ করা হলে, userdata userspace-reboot-fs-remount অ্যাকশনের সময় চেকপয়েন্টিং মোডে রিমউন্ট করা হয় (বিস্তারিত জানার জন্য নিম্নলিখিত বিভাগটি দেখুন)। sys.boot_completed property-এর মান 1 সেট করার পরে সফ্ট রিস্টার্ট করা হয়েছে বলে ধরে নেওয়া হয়। সফ্ট রিস্টার্টের শেষে, ডিসপ্লে বন্ধ রাখা হয় এবং এটি চালু করার জন্য ব্যবহারকারীর স্পষ্ট ইন্টারঅ্যাকশন প্রয়োজন।

ফাইল সিস্টেম চেকপয়েন্টিং

সফ্ট রিস্টার্টের আগে ফাইল সিস্টেম চেকপয়েন্টের অনুরোধ করা হলে, userdata সফ্ট রিস্টার্টের সময় চেকপয়েন্টিং মোডে আবার মাউন্ট করা হয়। fs_mgr_remount_userdata_into_checkpointing ফাংশনে রিমউন্ট করার লজিক প্রয়োগ করা হয় এবং চেকপয়েন্টিং পদ্ধতি অনুযায়ী এটি আলাদা হয়। বিশেষত, যখন userdata এগুলি সাপোর্ট করে:

  • ফাইলসিস্টেম লেভেল চেকপয়েন্টিং (যেমন, f2fs), userdata-কে checkpoint=disable বিকল্পের সাহায্যে রিমউন্ট করা হয়েছে।

  • ব্লক লেভেল চেকপয়েন্টিং (যেমন, ext4), তারপর /data আনমাউন্ট করা হয় এবং এটি যে প্যারেন্ট ডিভাইস ম্যাপার ডিভাইসের উপরে মাউন্ট করা ছিল, সেগুলি নষ্ট করা হয়। এরপরে, userdata সাধারণ চেকপয়েন্টিং বুটের মতো একই কোড পাথ ব্যবহার করে মাউন্ট করা হয়।

ক্রেডেনশিয়াল-এনক্রিপ্টেড (CE) এবং ডিভাইস-এনক্রিপ্টেড (DE) 'কী' ম্যানেজ করার জন্য ফাইল সিস্টেম লেভেল কীরিং ব্যবহার করা হলে, userdata আনমাউন্ট করার পরে 'কী' হারিয়ে যায়। ফাইল সিস্টেম কী রিংয়ে কোনও কী ইনস্টল করার সময়, কী ফিরিয়ে আনার অনুমতি দিতে, vold সেশন-লেভেল কী রিংয়ে fscrypt-provisioning একই ধরনের কী ইনস্টল করা হয়। init_user0 কল করা হলে, vold ফাইল সিস্টেম কী-রিংয়ে কী আবার ইনস্টল করে।

হার্ড রিবুট করার বিকল্প

সফ্ট রিস্টার্টের ফলে ডিভাইস যাতে ব্যবহারযোগ্য না থাকে তা নিশ্চিত করতে, Android 11-এ হার্ড রিবুট করার ফলব্যাক অন্তর্ভুক্ত থাকে যা নিচের যেকোনও একটি শর্ত পূরণ হলে ট্রিগার হয়:

  • নির্দিষ্ট টাইমআউটের মধ্যে কোনও ডিভাইস সফট রিস্টার্ট (অর্থাৎ, sys.init.userspace_reboot.in_progress=1) শুরু করতে না পারলে।
  • প্রদত্ত টাইম-আউটের মধ্যে কোনও প্রসেস বন্ধ করা যায়নি।
  • /system/bin/vdc volume reset অপারেশনটি সম্পূর্ণ হয়নি।
  • zRAM ডিভাইস আনমাউন্ট করা যায়নি।
  • কোনও অ্যাক্টিভ APEX প্যাকেজ ভুলভাবে আনমাউন্ট করা হয়।
  • চেকপয়েন্টিং মোডে userdata রিমউন্ট করার চেষ্টা ব্যর্থ হয়েছে।
  • কোনও ডিভাইস প্রদত্ত টাইমআউটের মধ্যে সফলভাবে বুট (অর্থাৎ, sys.boot_completed=1) করতে না পারলে এই সমস্যা হয়।

প্রতিটি ডিভাইসের কনফিগারেশন

নিম্নলিখিত প্রপার্টির ভ্যালু পরিবর্তন করে কিছু সফট রিস্টার্ট সংক্রান্ত বিষয় টিউন করা যেতে পারে:

  • init.userspace_reboot.is_supported নিয়ন্ত্রণ করে যে কখন কোনও ডিভাইস সফ্ট রিস্টার্ট করতে পারবে। এই প্রপার্টির ভ্যালু false, 0 হলে বা উল্লেখ করা না থাকলে, রিস্টার্ট করার প্রচেষ্টা বাতিল করা হয়।
  • init.userspace_reboot.sigkill.timeoutmillis বন্ধ করার জন্য SIGKILL সিগন্যাল পাওয়া প্রসেসের জন্য মিলি সেকেন্ডে টাইম-আউট কন্ট্রোল করে। প্রসেসগুলির মধ্যে একটি যদি নির্দিষ্ট টাইমআউটের মধ্যে বন্ধ হতে ব্যর্থ হয়, তাহলে হার্ড রিবুট ট্রিগার করা হয়।
  • init.userspace_reboot.sigterm.timeoutmillis, SIGTERM সিগন্যাল পাওয়া প্রসেস বন্ধ করার জন্য মিলি সেকেন্ডে টাইমআউট নিয়ন্ত্রণ করে। প্রদত্ত টাইমআউটের মধ্যে বন্ধ করা যায়নি এমন সব প্রসেস একটি SIGKILL সিগন্যাল পায়।
  • init.userspace_reboot.started.timeoutmillis সফ্ট রিস্টার্ট শুরু করার জন্য মিলি সেকেন্ডে টাইম-আউট কন্ট্রোল করে (অর্থাৎ, sys.init.userspace_reboot.in_progress=1)। কোনও ডিভাইস প্রদত্ত টাইম-আউটের মধ্যে সফ্ট রিস্টার্ট শুরু করতে না পারলে, হার্ড রিবুট করার জন্য ফলব্যাক ট্রিগার করা হয়।
  • init.userspace_reboot.userdata_remount.timeoutmillis, userdata আনমাউন্ট করার জন্য মিলি সেকেন্ডে টাইমআউট কন্ট্রোল করে। কোনও ডিভাইস নির্দিষ্ট সময়ের মধ্যে userdata আনমাউন্ট করতে না পারলে, হার্ড রিবুট করার জন্য ফলব্যাক ট্রিগার করা হয়।
  • init.userspace_reboot.watchdog.timeoutmillis কোনও ডিভাইসের সফলভাবে বুট হওয়ার টাইমআউট (অর্থাৎ, sys.boot_completed=1) নিয়ন্ত্রণ করে। কোনও ডিভাইস নির্ধারিত টাইমআউটের মধ্যে বুট হতে না পারলে, হার্ড রিবুট করার ফলব্যাক ট্রিগার করা হয়।

সফ্ট রিস্টার্টের সময় অ্যানিমেশন কাস্টমাইজ করুন

সফ্ট রিস্টার্টের রেফারেন্স ইমপ্লিমেন্টেশনে সফ্ট রিস্টার্টের সময় দেখানো অ্যানিমেশন কাস্টমাইজ করার ক্ষমতা অন্তর্ভুক্ত থাকে।

userspace-reboot-fs-remount অ্যাকশন শেষ হলে, init bootanim পরিষেবা শুরু করে। এই পরিষেবা নিম্নলিখিত অ্যানিমেশন ফাইল আছে কিনা তা চেক করে, তালিকাভুক্ত ক্রমে এবং প্রথমটি খুঁজে পেলে সেটি চালায়:

  • /product/media/userspace-reboot.zip
  • /oem/media/userspace-reboot.zip
  • /system/media/userspace-reboot.zip

নির্দিষ্ট কোনও সফট রিস্টার্ট অ্যানিমেশন ফাইল উল্লেখ করা না থাকলে, bootanim একটি ডিফল্ট android অ্যানিমেশন দেখায়।

পরীক্ষা করা

Android 11-এ সফ্ট রিস্টার্টের রেফারেন্স প্রয়োগ অন্তর্ভুক্ত। এছাড়াও, আপনি CTS পরীক্ষা ব্যবহার করে UserspaceRebootHostTest সফ্ট রিস্টার্ট যাচাই করতে পারবেন।