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

অ্যান্ড্রয়েড 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.rcon 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 অ্যাকশন ট্রিগার করে।

যদি সফ্ট রিস্টার্টের আগে ফাইল সিস্টেম চেকপয়েন্টিং অনুরোধ করা হয়, userspace-reboot-fs-remount অ্যাকশন চলাকালীন userdata চেকপয়েন্টিং মোডে পুনরায় মাউন্ট করা হয় (বিস্তারিত জানতে নিম্নলিখিত বিভাগটি দেখুন)। 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 অ্যানিমেশন দেখায়।

টেস্টিং

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