Ubuntu-வில் /boot partition-ஐ சுத்தம் செய்வது எப்படி?
/boot partition நிரம்பியதால் apt error காட்டுகிறதா? பழைய linux-image கோப்புகளை பாதுகாப்பாக நீக்கி, உங்கள் கணினியின் இடவசதியை மீட்டெடுப்பதற்கான எளிய வழிமுறைகளை இங்கே காணலாம்.
/boot partition பழைய kernels-ஆல் நிரம்பும்போது apt ஏன் வேலை செய்வதை நிறுத்துகிறது
Ubuntu-வில், ஒவ்வொரு kernel update-ம் புதிய கோப்புகளை /boot-ல் எழுதுகிறது. பழைய கோப்புகளை அது நீக்குவதில்லை. இதனால் சிறிய அளவிலான /boot partition நிரம்பிவிடுகிறது. இதன் விளைவாக, apt-ஆல் புதிய installation-ஐ முடிக்க முடிவதில்லை. இதைச் சரிசெய்ய இரண்டு படிகள் உள்ளன. முதலில், கணினியில் உள்ள எந்தெந்த packages kernels என்பதை கண்டறிய வேண்டும்; தற்போது நீங்கள் பயன்படுத்தும் kernel எது என்பதையும் உறுதிப்படுத்த வேண்டும். அதன் பிறகு, மீதமுள்ளவற்றை apt autoremove --purge மூலம் நீக்க வேண்டும்.
இதைச் செய்யும்போது வரிசைமுறை முக்கியமானது. தற்போது இயங்கிக்கொண்டிருக்கும் kernel-ஐ ஒருபோதும் நீக்கக்கூடாது. சில நேரங்களில், apt-ஆல் எந்தச் செயல்பாட்டையும் செய்ய முடியாத அளவுக்கு partition நிரம்பியிருக்கலாம். எனவே, முதலில் பிரச்சினையை முறையாகக் கண்டறியவும்.
தோல்வி உண்மையில் எவ்வாறு வெளிப்படுகிறது
ஒரு kernel பதிப்பு /boot-ல் இரண்டு பெரிய கோப்புகளை நிறுவுகிறது: சுருக்கப்பட்ட kernel (vmlinuz-<version>) மற்றும் initramfs (initial RAM filesystem, initrd.img-<version>, இது உண்மையான root-ஐ mount செய்வதற்கு முன்பு kernel பிரித்தெடுக்கும் சிறிய காப்பகம்). Initramfs உங்கள் கணினியில் நிறுவும் நேரத்திலேயே உருவாக்கப்படுகிறது, இதனால்தான் நிறுவுதலுக்கு பதிவிறக்க அலைவரிசை (bandwidth) மட்டுமல்லாமல், போதுமான காலி இடமும் தேவைப்படுகிறது. போதிய இடவசதி இல்லாதபோது, இந்த உருவாக்கம் தோல்வியடைந்து, அதனுடன் அந்த package-ம் தோல்வியடைகிறது.
update-initramfs: Generating /boot/initrd.img-6.8.0-64-generic
gzip: stdout: No space left on device
E: mkinitramfs failure gzip 1
update-initramfs: failed for /boot/initrd.img-6.8.0-64-generic with 1.
dpkg: error processing package linux-image-6.8.0-64-generic (--configure):
installed linux-image-6.8.0-64-generic package post-installation script subprocess returned error exit status 1பதிப்பு சரம் (version string) உங்களுடையதாக இருக்கும். /etc/initramfs-tools/initramfs.conf-ல் உள்ள COMPRESS=-லிருந்து compressor பெயர் வருகிறது, எனவே புதிய image-ல் zstd என்றும், பழைய ஒன்றில் gzip என்றும் இருக்கலாம். இந்தப் சிக்கலை அடையாளம் காணும் இரண்டு வரிகள் No space left on device மற்றும் அதற்கு கீழே உள்ள dpkg: error processing package வரி ஆகும்.
அதன்பிறகு, அந்த package பாதியிலேயே கட்டமைக்கப்பட்ட நிலையில் (half-configured) இருக்கும். அதன் பிறகு இயக்கப்படும் ஒவ்வொரு apt-ம் அதை மீண்டும் கட்டமைக்க முயற்சிக்கும், அதே வழியில் தோல்வியடையும், மற்றும் E: Sub-process /usr/bin/dpkg returned an error code (1)-உடன் முடிவடையும். வட்டு இடவசதியைத் தாண்டி கவனிக்க வேண்டிய பகுதி இதுதான்: unattended-upgrades அதன் கால அட்டவணையில் இயங்கும்போது, அதே பிழையைச் சந்தித்து நின்றுவிடும். server ஆரோக்கியமாக இருப்பது போலத் தோன்றும், ஆனால் பாதுகாப்பு patches-ஐப் பயன்படுத்துவதை அமைதியாக நிறுத்திவிடும். இதன் பொருள், நீங்கள் முயற்சிக்கும் எந்தவொரு தொடர்பற்ற நிறுவுதலும் அதே வரியுடன் தோல்வியடையும், மேலும் நீங்கள் அந்த நேரத்தில் எதைச் சேர்க்க முயன்றீர்களோ அதன் மீது பழி விழும். இதனால்தான் Ubuntu-வில் தோல்வியடையும் Tailscale நிறுவுதல் என்பதை முதலில் ஒரு apt பிழையாகப் படிப்பது பயனுள்ளது. நீங்கள் இந்த நிலையை அடைவதற்கு முன்பே apt update தோல்வியடைந்தால், அது ஒரு தனிப் பிரச்சினை, பெரும்பாலும் deb822 sources இடப்பெயர்வுக்குப் பிறகு ஏற்படும் நகல் பதிவு (duplicate entry) காரணமாக இருக்கலாம்.
/boot ஒரு தனி partition-ஆ என்பதைச் சரிபார்த்தல்
எதையும் நீக்குவதற்கு முன்பு, நீங்கள் உண்மையில் எவ்வளவு இடத்தை விடுவிக்கிறீர்கள் என்பதைக் கண்டறியவும்.
findmnt /boot
findmnt -T /boot
df -h /boot //boot அதன் சொந்த mount point-ஆக இருந்தால் மட்டுமே முதல் கட்டளை ஒரு வரியை அச்சிடும். இரண்டாவது கட்டளை எப்போதும் அச்சிடும், மேலும் /boot-ஐக் கொண்டுள்ள filesystem-ன் பெயரைத் தெரிவிக்கும். அவை /-ன் அதே filesystem-ஐக் குறிப்பிட்டால், /boot என்பது root filesystem-ல் உள்ள ஒரு directory மட்டுமே; அது தானாகவே நிறையாது. உங்கள் root filesystem நிரம்பிவிட்டது, பழைய kernels அதற்கு ஒரு காரணம் மட்டுமே. அந்தச் சூழலில், /var/cache/apt/archives-ன் கீழ் உள்ள தரவிறக்கம் செய்யப்பட்ட .deb கோப்புகளை நீக்கும் sudo apt clean, உங்களுக்குச் சிறிது இடத்தை உருவாக்கிக் கொடுக்கும். உண்மையான /boot partition கொண்ட கணினியில், apt clean அங்கு எந்த இடத்தையும் விடுவிக்காது, ஏனெனில் cache வேறு ஒரு filesystem-ல் உள்ளது.
இப்போது நீங்கள் கையாள வேண்டிய அளவைக் கண்டறியவும்.
df -h /boot
ls -lh /boot/vmlinuz-$(uname -r) /boot/initrd.img-$(uname -r)Avail நெடுவரிசையை அந்த இரண்டு கோப்புகளின் அளவோடு ஒப்பிடவும். initrd என்பது பெரிய கோப்பாகும். அடுத்த kernel update-க்கு அதே அளவுள்ள மற்றொரு ஜோடி கோப்புகளுக்கு இடம் தேவைப்படும். எனவே, Avail தற்போதைய initrd-ஐ விடச் சிறியதாக இருந்தால், அடுத்த update தோல்வியடையும்.
தற்போது இயங்கும் kernel-ஐக் கண்டறிதல்
uname -r
cat /var/run/reboot-required.pkgsuname -r கட்டளையானது தற்போது நினைவகத்தில் (memory) இயங்கும் kernel-ன் release string-ஐக் காட்டும். அந்த string-ஐ நகலெடுத்து வைத்துக்கொள்ளவும். இது நீங்கள் மாற்றக்கூடாத ஒரே version ஆகும்.
ஒரு package reboot செய்யக் கோரும்போது மட்டுமே இரண்டாவது கோப்பு உருவாகும். அதில் உள்ள linux-image வரியானது, புதிய kernel வட்டில் (disk) நிறுவப்பட்டு, இன்னும் பயன்படுத்தப்படாமல் இருப்பதைக் குறிக்கிறது. ஏனெனில், அது நிறுவப்பட்ட பிறகு கணினி reboot செய்யப்படவில்லை. முடிந்தால், சுத்தம் செய்வதற்கு முன்பு reboot செய்யவும். apt தற்போது இயங்கும் kernel மற்றும் மிகப்புதிய kernel ஆகிய இரண்டையும் பாதுகாக்கும். எனவே, நீங்கள் பழைய kernel-ஐ இயக்கும்போது சுத்தம் செய்தால், தேவைக்கு அதிகமான ஒரு version-ஐ அது தக்கவைக்கும்.
Kernel packages-ஐப் பட்டியலிட்டு அவற்றின் நிலையைச் சரிபார்த்தல்
dpkg --list | grep -E 'linux-(image|modules|headers|tools)' | awk '{print $1, $2}'முதல் புலம் dpkg-ன் நிலை குறியீட்டைக் குறிக்கிறது. ii என்பது அந்த package நிறுவப்பட்டு, configure செய்யப்பட்டுள்ளது என்று பொருள். iF என்பது நிறுவப்பட்டாலும், முழுமையாக configure செய்யப்படவில்லை என்று பொருள்; மேலே குறிப்பிட்ட failed upgrade-க்கு பிறகு இதுதான் நிகழும். rc என்பது அந்த package நீக்கப்பட்டுவிட்டது, ஆனால் அதன் configuration கோப்புகள் இன்னும் வட்டில் உள்ளன என்று பொருள்; இது /boot-ல் எந்த இடத்தையும் அடைத்துக்கொள்ளாது, எனவே இதை தாராளமாக purge செய்யலாம்.
இரண்டாவது புலம் அது என்ன வகையான package என்பதைத் தெரிவிக்கும். linux-image-6.8.0-64-generic போன்ற பதிப்பு எண் கொண்ட பெயர் ஒரு குறிப்பிட்ட kernel-ஐக் குறிக்கும். linux-image-generic, linux-headers-generic அல்லது linux-generic போன்ற பதிப்பு எண் இல்லாத பெயர்கள் meta package-களைக் குறிக்கும். இதில் kernel இருக்காது. புதிய kernel பதிப்புகளை apt upgrade தானாகவே பதிவிறக்கம் செய்ய உதவுவதே இதன் பணி. ஒரு meta package-ஐ நீக்கினால், கணினிக்கு இனி kernel updates கிடைக்காது; இது குறித்து எந்த எச்சரிக்கையும் வராது.
இந்த குடும்பங்கள் பின்வருமாறு பிரிக்கப்படுகின்றன. linux-image-* என்பது /boot-ல் உள்ள compressed kernel-ஐக் கொண்டிருக்கும். linux-modules-* மற்றும் linux-modules-extra-* ஆகியவை /lib/modules-ன் கீழ் உள்ள drivers-ஐக் கொண்டிருக்கும். linux-headers-* என்பது /usr/src-ன் கீழ் உள்ள build headers-ஐக் கொண்டிருக்கும்; அதாவது headers-ஐ purge செய்வது root filesystem-ல் இடத்தை விடுவிக்கும், /boot-ல் அல்ல. உங்கள் பிரச்சினை ஒரு முழுமையான /boot partition என்றால், நீங்கள் image packages-ஐத்தான் நீக்க வேண்டும்.
ls -1 /boot/vmlinuz-*
ls -1 /lib/modules/இந்த இரண்டு பட்டியல்களும் ஒன்றுக்கொன்று மற்றும் dpkg --list வெளியீட்டுடன் ஒத்துப்போக வேண்டும். /lib/modules-ல் உள்ள ஒரு directory-க்கு இணையான installed package இல்லை என்றால், அது யாரோ கோப்புகளை நேரடியாக நீக்கியதால் எஞ்சியிருக்கும் கோப்பாகும்.
எந்தெந்த kernels-ஐ வைத்துக்கொள்ள வேண்டும் என்பதை apt எவ்வாறு தீர்மானிக்கிறது
apt autoremove தான் பாதுகாக்கப்பட்டதாகக் கருதும் ஒரு kernel-ஐ நீக்காது. நீங்கள் தற்போது இயக்கி வரும் kernel-ம் இந்த பாதுகாக்கப்பட்ட தொகுப்பில் அடங்கும். Ubuntu releases-க்கு இடையே இந்த retention policy மாறியுள்ளதால், எங்கோ எழுதப்பட்டிருக்கும் ஒரு எண்ணை நம்புவதை விட, உங்கள் கணினியில் உள்ள அமைப்பைப் படிப்பதே சிறந்தது.
apt-config dump | grep -i -e neverautoremove -e versionedkernel
ls -l /etc/apt/apt.conf.d/01autoremove /etc/apt/apt.conf.d/01autoremove-kernelsAPT::NeverAutoRemove என்பது apt autoremove நீக்க மறுக்கும் package name patterns-ன் பட்டியல் ஆகும். APT::VersionedKernelPackages என்பது apt எவற்றை versioned kernel packages என்று கருதுகிறதோ, அந்த name prefixes-ன் பட்டியல் ஆகும். /etc/apt/apt.conf.d/01autoremove-kernels-ஐ உருவாக்கும் releases-ல், ஒவ்வொரு முறை kernel package நிறுவப்படும்போதும் /etc/kernel/postinst.d/apt-auto-removal அந்த கோப்பை மீண்டும் எழுதும். எனவே, அதை நீங்களாகத் திருத்துவதால் எந்தப் பயனும் இல்லை: அடுத்த முறை kernel நிறுவும்போது உங்கள் திருத்தம் மேலெழுதப்படும் (overwrite). அந்த கோப்பு இல்லாத releases-ல், apt அதே பாதுகாப்பை உள்முகமாகவே செயல்படுத்துகிறது. எது எப்படியிருப்பினும், apt-config dump உங்கள் கணினியில் நடைமுறையில் உள்ள விதிகளைக் காட்டும். அந்த வெளியீடே உங்கள் release-க்கான சரியான விடையாகும்.
பாதுகாப்பாக இயக்கக்கூடிய cleanup
sudo apt update
sudo apt autoremove --purge --dry-run--dry-run வட்டில் எதையும் மாற்றாது, உண்மையான இயக்கத்தின் போது எவை நீக்கப்படுமோ அவற்றை மட்டும் பட்டியலிடும். அந்தப் பட்டியலை கவனமாகப் படிக்கவும். இரண்டு விஷயங்கள் இருந்தால் நீங்கள் நிறுத்த வேண்டும். நீக்கப்பட வேண்டிய பட்டியலில் linux-generic அல்லது linux-image-generic போன்ற meta package இருந்தால், ஏதோ ஒன்று அதை automatic என்று குறித்துள்ளது என்று அர்த்தம்; அதை நீக்கினால் உங்கள் kernel updates நின்றுவிடும். நீக்கப்பட வேண்டிய பட்டியலில் uname -r-லிருந்து வரும் string இருந்தால், தற்போது இயங்கும் kernel பாதுகாக்கப்படவில்லை என்று அர்த்தம்; இது நடக்கக்கூடாது, எனவே மேலும் தொடரும் முன் இதை ஆராய வேண்டும்.
பட்டியல் சரியாக இருந்தால், அதை உண்மையாக இயக்கவும்.
sudo apt autoremove --purge
df -h /boot--purge பாதியானது, package-ஐ நீக்குவதுடன் சேர்த்து எஞ்சியிருக்கும் configuration-ஐயும் நீக்கும். இது கூடுதல் இடத்தை மிகச் சிறிதளவே விடுவிக்கும், ஆனால் dpkg --list-ல் rc வரிகள் சேராமல் தடுக்கும், இது அடுத்தமுறை audit செய்யும்போது எளிதாக இருக்கும்.
பிறகு, boot menu மீண்டும் உருவாக்கப்பட்டதை உறுதிப்படுத்தவும். ஒரு kernel package-ஐ நீக்கும்போது அது உங்களுக்காக update-grub-ஐ இயக்கும், எனவே menu-வில் தற்போது இருக்கும் கோப்புகள் மட்டுமே இடம்பெற்றிருக்க வேண்டும்.
sudo grep -o 'vmlinuz-[^ ]*' /boot/grub/grub.cfg | sort -u
ls -1 /boot/vmlinuz-*முதல் வெளியீட்டில் உள்ள ஒவ்வொரு version-ம் இரண்டாவது வெளியீட்டிலும் இருக்க வேண்டும். இல்லாத ஒரு கோப்பைச் சுட்டிக்காட்டும் menu entry இருந்தால், அது இயங்கும் server-ஐ GRUB prompt-ல் நிற்கும் நிலைக்குக் கொண்டு செல்லும். இது kernel update-க்குப் பிறகு boot ஆகாத VPS-க்கு ஒரு வழியாகும். rescue console மூலம் இதைச் சரிசெய்வதை விட, இங்கே கவனமாக இருப்பதே சிறந்தது.
ஏன் apt autoremove சில நேரங்களில் எதையும் நீக்குவதில்லை
apt autoremove என்பது தானியங்கி (automatic) என்று குறிக்கப்பட்ட தொகுப்புகளை மட்டுமே நீக்கும்; அதாவது, வேறொரு மென்பொருளின் சார்புத் தொகுப்பாக (dependency) நிறுவப்பட்டவை மட்டுமே நீக்கப்படும். நீங்கள் apt install linux-image-6.8.0-40-generic மூலம் நீங்களே நிறுவிய ஒரு kernel, manual என்று குறிக்கப்பட்டிருக்கும். அது எவ்வளவு பழையதாக இருந்தாலும், autoremove அதை ஒருபோதும் நீக்காது.
apt-mark showmanual | grep -E '^linux-'அந்த வெளியீட்டில் உள்ள எந்தவொரு versioned kernel-ம் autoremove-க்குத் தெரியாது. உங்கள் பட்டியலிலிருந்து version strings-ஐப் பயன்படுத்தி, அதை மீண்டும் manual நிலைக்கு மாற்றவும்:
sudo apt-mark auto linux-image-6.8.0-40-generic linux-modules-6.8.0-40-generic
sudo apt autoremove --purge --dry-runMeta packages-ஐ manual நிலையிலேயே வைத்திருக்கவும். அவை நீங்கள் நேரடியாகக் கோரியவை என்பதால், அவை manual என்று குறிக்கப்பட வேண்டியது அவசியம்.
குறிப்பிட்ட ஒரு kernel-ஐ நீக்குதல்
சில நேரங்களில், கொள்கைப்படி (policy) தானாக நீக்கப்படும் வரை காத்திருக்காமல், ஒரு குறிப்பிட்ட version-ஐ உடனடியாக நீக்க வேண்டியிருக்கும். Image package-ன் பெயரை மட்டும் குறிப்பிட்டால் போதும், மீதமுள்ளவற்றை apt கவனித்துக்கொள்ளும்.
sudo apt purge linux-image-6.8.0-40-genericapt எந்தவொரு மாற்றத்தையும் செய்வதற்கு முன்பு நீக்கப்பட வேண்டியவற்றின் பட்டியலைத் திரையில் காட்டும். ஏனெனில், linux-modules-extra-* அந்த image package-ஐச் சார்ந்திருப்பதால், ஒரே பரிவர்த்தனையில் (transaction) அவை நீக்கப்பட வேண்டும். திரையில் தோன்றும் அந்தப் பட்டியல் உங்கள் பாதுகாப்புச் சரிபார்ப்பு ஆகும்; நீங்கள் நீக்க விரும்பிய version-உடன் ஏதேனும் meta package-ம் சேர்ந்து நீக்கப்படுகிறதா என்பதை அதில் கவனிக்கலாம். எதிர்பாராத ஏதேனும் இருந்தால் n என்று பதிலளிக்கவும். அதன் பிறகு, பயன்பாடு இன்றி எஞ்சியிருக்கும் module மற்றும் header package-களை நீக்க sudo apt autoremove --purge கட்டளையைப் பயன்படுத்தவும்.
இயங்கும் kernel-ஐ ஏன் ஒருபோதும் நீக்கக்கூடாது
கோப்புகள் நீக்கப்பட்ட பிறகும், நினைவகத்தில் (memory) ஏற்கனவே உள்ள kernel தொடர்ந்து இயங்கும், எனவே முதலில் எந்தப் பாதிப்பும் தெரிவதில்லை. ஆனால், kernel இதுவரை ஏற்றாத (load) அனைத்தும் செயலிழக்கும். linux-modules-$(uname -r)-ஐ நீக்குவது /lib/modules/$(uname -r)/-ஐ அழித்துவிடும், இதனால் அடுத்த முறை module-ஐ ஏற்ற முயலும்போது அது தோல்வியடையும்:
modprobe: FATAL: Module nf_tables not found in directory /lib/modules/6.8.0-64-genericஅந்த நிலையிலிருந்து firewall-ஐ மீண்டும் ஏற்ற (reload) முடியாது, அதேபோல் இந்த kernel இதுவரை அணுகாத ஒரு filesystem வகையை mount செய்யவும் முடியாது. இதற்கிடையில் /boot/vmlinuz-$(uname -r) நீக்கப்பட்டுவிடுவதால், boot menu-வில் நீங்கள் தற்போது இயக்கும் kernel காட்டப்படாது, அடுத்த முறை reboot செய்யும்போது கணினி வேறு ஏதோ ஒரு நிலைக்குச் சென்றுவிடும். கணினி தொடர்ந்து traffic-ஐக் கையாண்டாலும், அது ஏற்கனவே boot செய்ய முடியாத நிலைக்குத் தள்ளப்பட்டுவிட்டது. ஒவ்வொரு முறையும் நீக்க வேண்டிய கோப்புகளின் பட்டியலைச் சரிபார்க்கும்போது uname -r-ஐ ஒப்பிட்டுப் பார்க்கவும்.
/boot partition நிரம்பிவிட்டதால் apt இயங்காத நிலை
இந்தச் சூழலில்தான் பயனர்கள் இந்தத் தீர்வைத் தேடி வருகிறார்கள். apt autoremove சரியாக உள்ளமைக்கப்படாத kernel package-ஐ முழுமையாக உள்ளமைக்க dpkg தேவைப்படுகிறது. அந்தச் செயல்முறை initramfs-ஐ மீண்டும் உருவாக்க வேண்டும், அதற்கு /boot-ல் போதிய இடவசதி தேவை, ஆனால் அங்கு இடம் இல்லை. இந்தச் சுழற்சியை ஒருமுறை கைமுறையாக உடைக்க வேண்டும்.
uname -r
ls -1 /boot/initrd.img-*uname -r வழங்கிய பதிப்பு அல்லாத ஏதேனும் ஒரு initrd கோப்பைத் தேர்ந்தெடுத்து, அந்த ஒரு கோப்பை மட்டும் நீக்கவும்.
sudo rm /boot/initrd.img-6.8.0-40-generic
sudo apt --fix-broken install
sudo apt autoremove --purge
sudo update-grubஒவ்வொரு வரியும் ஒரு காரணத்தைக் கொண்டுள்ளது. rm என்பது ஒரு திட்டமிட்ட விதிவிலக்கு; இது ஒரு கோப்பு இல்லாதபோதும் இருப்பதாக dpkg-ஐ நம்ப வைக்கிறது. apt --fix-broken install, initramfs-க்குத் தேவையான இடம் கிடைத்தவுடன், தோல்வியடைந்த உள்ளமைப்பை நிறைவு செய்கிறது. autoremove --purge, நீங்கள் நீக்கிய கோப்புடன் தொடர்புடைய package-ஐயும் மற்ற பழைய பதிப்புகளையும் நீக்குகிறது; இது dpkg-ஐ வட்டுடன் (disk) மீண்டும் ஒருங்கிணைக்கிறது. update-grub, தற்போதுள்ள கோப்புகளைக் கொண்டு menu-வை மீண்டும் உருவாக்குகிறது. rm மற்றும் update-grub ஆகியவற்றுக்கு இடையே கணினியை reboot செய்ய வேண்டாம், ஏனெனில் அந்த இடைவெளியில் menu நீங்கள் நீக்கிய கோப்பைச் சுட்டிக்காட்டக்கூடும். dpkg குறுக்கிடப்பட்டதாகப் புகார் அளித்தால், apt --fix-broken install செய்த அதே பழுதுபார்ப்பை sudo dpkg --configure -a செய்யும்.
dnf சிஸ்டம்களில் இதே பணி
உங்கள் VPS ஆனது Fedora அல்லது Rocky Linux போன்ற RHEL சார்ந்த இயங்குதளங்களில் இயங்கினால், இதற்கான செயல்முறை நேர்மாறாக இருக்கும். Debian மற்றும் Ubuntu சிஸ்டம்கள் apt autoremove விதிகள் மூலம் கர்னல்களைப் பாதுகாக்கின்றன, மேலும் சுத்தம் செய்யும் பணியை உங்களிடமோ அல்லது unattended-upgrades-விடமோ விட்டுவிடுகின்றன. ஆனால், dnf ஆனது installonly_limit எனப்படும் எண்ணிக்கையை அமல்படுத்துகிறது; புதிய கர்னல் நிறுவப்படும்போது, நிர்ணயிக்கப்பட்ட எண்ணிக்கையைத் தாண்டினால், அது தானாகவே பழைய கர்னலை நீக்கிவிடும். தற்போது நடைமுறையில் உள்ள மதிப்பை grep installonly_limit /etc/dnf/dnf.conf மற்றும் man 5 dnf.conf மூலம் சரிபார்க்கலாம், மேலும் தேங்கியுள்ள பழைய கோப்புகளை sudo dnf remove --oldinstallonly மூலம் நீக்கலாம். தற்போது இயங்கிக்கொண்டிருக்கும் கர்னல் அங்கும் பாதுகாக்கப்படுகிறது. இந்த இரண்டு package manager-களுக்கும் இடையிலான விரிவான ஒப்பீட்டிற்கு, dnf மற்றும் apt கட்டளைகளின் ஒப்பீடு பகுதியைப் பார்க்கவும்.
மீண்டும் இது நிகழாமல் தடுத்தல்
நீங்கள் நினைவில் வைத்துக்கொண்டு செய்யும் சுத்தம் செய்தல் ஒரு கட்டத்தில் தோல்வியடையும், எனவே கர்னல்களை நிறுவும் அமைப்பிலேயே இதைச் சேர்த்துவிடுங்கள். /etc/apt/apt.conf.d/50unattended-upgrades கோப்பைத் திறந்து, கீழே உள்ள சாவிகளைத் தேடுங்கள். ஏற்கனவே உள்ள கோப்பில் இவை கருத்துகளாக (commented lines) இருக்கும்:
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";கோப்பின் இறுதியில் இரண்டாவது நகலைச் சேர்ப்பதற்குப் பதிலாக, இவற்றில் உள்ள கருத்துகளை நீக்கி (uncomment) பயன்படுத்துங்கள். apt கட்டமைப்பில், ஒரு சாவிக்கு கடைசியாக வழங்கப்படும் மதிப்பீடே எடுத்துக்கொள்ளப்படும். எனவே, ஒரே சாவியை இருமுறை குறிப்பிடுவது கோப்பில் முரண்பாட்டை உண்டாக்கி, எந்த மதிப்பீடு செயல்பாட்டில் உள்ளது என்ற குழப்பத்தை ஏற்படுத்தும். பகுப்பாய்வி (parser) எதை எடுத்துக்கொள்கிறது என்பதைச் சரிபார்க்கவும், எந்த மாற்றத்தையும் ஏற்படுத்தாத ஒரு இயக்கத்தை கவனிக்கவும்:
apt-config dump | grep -i 'Unattended-Upgrade::Remove'
sudo unattended-upgrade --dry-run --debug
sudo tail -n 40 /var/log/unattended-upgrades/unattended-upgrades.logபதிவேடு (log) தான் இதற்கான சான்று. இது ஒவ்வொரு இயக்கத்தையும் பதிவு செய்கிறது. எனவே, போதிய இடவசதி இல்லாததால் தோல்வியடைந்த ஒரு மேம்படுத்தல், கணினியில் பேட்ச்கள் (patches) பின்தங்கியிருப்பதை யாரும் கவனிப்பதற்கு முன்பே இதில் பதிவாகிவிடும். அந்த கட்டமைப்பின் மற்ற பகுதிகள் Ubuntu-வில் தானியங்கி பாதுகாப்பு மேம்படுத்தல்கள் பகுதியில் விளக்கப்பட்டுள்ளன.
அடுத்த கர்னல் வருவதற்கு முன்பு சரிபார்க்க வேண்டிய ஒரு எண் உள்ளது. இது இந்த வழிகாட்டியின் தொடக்கத்தில் பயன்படுத்திய அதே இரண்டு கட்டளைகளின் தொகுப்புதான்:
df -h /boot
ls -lh /boot/initrd.img-$(uname -r)Avail-ன் அளவு அந்த கோப்பை விடப் போதுமான அளவு பெரியதாக இல்லையென்றால், அடுத்த கர்னல் நிறுவல் மேலே குறிப்பிட்டது போலவே தோல்வியடையும். எனவே, மேம்படுத்தலின் போது சிக்கலைச் சந்திக்காமல், இப்போதே அதைச் சரிசெய்யவும். உங்கள் VPS-ன் வட்டு ஆரோக்கியச் சோதனைகளுடன் சேர்த்து இதையும் ஒரு நிமிடம் ஒதுக்கிச் சரிபார்ப்பது பயனுள்ளது. ஒரு release upgrade-க்கு முன்னால் இது மிக முக்கியமானது. ஏனெனில், Ubuntu 24.04-லிருந்து 26.04-க்கு மாறுதல் செயல்முறையின் தொடக்கத்திலேயே புதிய கர்னலை நிறுவும். அப்போது /boot-ல் இடவசதி குறைவாக இருந்தால் do-release-upgrade மேம்படுத்தலைத் தொடர மறுத்துவிடும்.
FAQ
Ubuntu ஏன் பழைய kernel-களை நீக்காமல் வைத்திருக்கிறது?
ஏனெனில், boot ஆகாத ஒரு kernel இருந்தால், நீங்கள் தேர்ந்தெடுப்பதற்கு வேறு எதுவும் இருக்காது. முந்தைய பதிப்பை வைத்திருப்பது, ஒரு தவறான update-ஐ GRUB menu மூலம் சரிசெய்ய உதவுகிறது; இல்லையெனில் நீங்கள் provider rescue console-ஐ நாட வேண்டியிருக்கும். apt எனவே, ஒரு குறிப்பிட்ட kernel தொகுப்புகளை தானாக நீக்கப்படாமல் பாதுகாக்கிறது, இதில் நீங்கள் தற்போது இயக்கும் kernel எப்போதும் அடங்கும். உங்கள் release எந்தெந்த patterns-ஐ பாதுகாக்கிறது என்பதைப் பார்க்க apt-config dump | grep -i neverautoremove-ஐ இயக்கவும், ஏனெனில் release-க்கு release இந்த policy மாறியிருக்கலாம்.
Production server-ல் apt autoremove --purge-ஐ இயக்குவது பாதுகாப்பானதா?
ஆம், ஆனால் முதலில் dry run-ஐ கவனமாகப் பார்க்க வேண்டும். எதையும் நீக்காத sudo apt autoremove --purge --dry-run-ஐ இயக்கி, காட்டப்படும் பட்டியலைச் சரிபார்க்கவும். அதில் linux-generic அல்லது linux-image-generic போன்ற meta package இருந்தால் நிறுத்தவும், ஏனெனில் அவற்றை நீக்கினால் எதிர்கால kernel updates கிடைக்காது. uname -r காட்டும் version string அதில் இருந்தாலும் நிறுத்தவும். இவை எதுவும் இல்லை என்றால், நீக்கப்படுபவை பழைய kernel-கள் மற்றும் தேவையற்ற dependencies மட்டுமே.
apt autoremove எதையும் நீக்கவில்லை, ஆனால் /boot இன்னும் நிரம்பியுள்ளது. இப்போது என்ன செய்வது?
பழைய kernel-கள் பெரும்பாலும் manual என்று குறிக்கப்பட்டிருக்கலாம், autoremove என்பது automatic என்று குறிக்கப்பட்ட தொகுப்புகளை மட்டுமே நீக்கும். apt-mark showmanual | grep -E '^linux-'-ஐ இயக்கவும். அதில் பட்டியலிடப்பட்டுள்ள எந்தவொரு versioned kernel-ம் ஒரு கட்டத்தில் கைமுறையாக நிறுவப்பட்டிருக்கலாம். அதை sudo apt-mark auto linux-image-<version> மூலம் automatic என்று மாற்றவும், பின் மீண்டும் dry run-ஐ இயக்கவும். அல்லது sudo apt purge linux-image-<version> மூலம் அந்த குறிப்பிட்ட version-ஐ நேரடியாக நீக்கவும்.
/boot-ல் உள்ள கோப்புகளை கைமுறையாக நீக்கலாமா?
/boot முழுமையாக நிரம்பி, apt-ஆல் பழுதடைந்த kernel package-ஐ configure செய்ய முடியாத சூழலில் மட்டுமே, ஒருமுறை மட்டும் இதைச் செய்யலாம். uname -r-ன் வெளியீட்டில் இல்லாத ஒரு குறிப்பிட்ட initrd.img-<version> கோப்பை மட்டும் நீக்கவும். அதன் பிறகு உடனடியாக sudo apt --fix-broken install, sudo apt autoremove --purge மற்றும் sudo update-grub ஆகியவற்றை இயக்கவும். இந்த தொடர் நடவடிக்கைகள் இன்றி கோப்புகளை நீக்கினால், dpkg இல்லாத கோப்புகளைப் பதிவு செய்து வைத்திருக்கும், மேலும் GRUB menu-வில் உள்ள entries இல்லாத கோப்புகளைக் காட்டும். இதனால், நீங்கள் தவறு செய்த தருணத்தில் அல்லாமல், அடுத்த முறை reboot செய்யும்போது machine boot ஆகாமல் நின்றுவிடும்.