কেবলমাত্র একটি ফাইল সিস্টেমের পাঠযোগ্য মাউন্ট করবেন এবং র‌্যামে পুনর্নির্দেশ লিখেছেন?


21

লুপব্যাক ফাইলটি কেবল পঠনযোগ্য হিসাবে মাউন্ট করা এবং সমস্ত লেখার র‌্যামে পুনর্নির্দেশ করা সম্ভব?

উত্তর:


18

এটিউসের মতো ইউনিয়ন ফাইল সিস্টেম স্তর ব্যবহার করা সম্ভব ।

ডেমো:

একটি ফাইল সিস্টেমের চিত্র তৈরি করুন

# dd if=/dev/zero of=/tmp/image bs=1024 count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.0028428 s, 369 MB/s
# mke2fs /tmp/image 
...

এটি মাউন্ট, এটি বসান

# mkdir /tmp/imgmnt
# mount -o loop /tmp/image /tmp/imgmnt
# echo hello > /tmp/imgmnt/hello.txt
# umount /tmp/imgmnt

এটি কেবল পঠনযোগ্য হিসাবে মাউন্ট করুন

# mount -o loop,ro /tmp/image /tmp/imgmnt
# echo blah > /tmp/imgmnt/hello.txt 
-su: /tmp/imgmnt/hello.txt: Read-only file system

একটি ছোট র‌্যাম ফাইল সিস্টেম

# mkdir /tmp/rammnt
# mount -t tmpfs -o size=1M none /tmp/rammnt

উভয় একত্রিত

# mkdir /tmp/combined
# mount -t aufs -o br:/tmp/rammnt:/tmp/imgmnt=ro none /tmp/combined

(কেবল পঠনযোগ্য) শীর্ষে brস্ট্যাকিং /tmp/rammnt(পঠন-লিখন) দ্বারা একটি নতুন "শাখা" ( ) তৈরি করার জন্য সেই মাউন্ট বিকল্প /tmp/imgmnt। এই "শাখা" ফাইল সিস্টেমটি (পঠন-লিখন) হিসাবে দৃশ্যমান করা হয়েছে /tmp/combined

( সমস্ত বিবরণের জন্য আউফস (5) ম্যান পৃষ্ঠা দেখুন))

এখন যা হয়েছে তা এখানে আপনার কাছে যা রয়েছে:

# ls /tmp/combined
hello.txt  lost+found
# cat /tmp/combined/hello.txt 
hello
# echo bye > /tmp/combined/hello.txt 
# cat /tmp/combined/hello.txt 
bye

# cat imgmnt/hello.txt 
hello
# cat rammnt/hello.txt 
bye

সুতরাং tmpfsফাইল সিস্টেমে "স্টপ" লেখেন , তারা লুপ-মাউন্ট করা ইমেজ ফাইলটিতে আবার প্রচার করার চেষ্টা করেন না।

আপনি একটি সাধারণ ডিরেক্টরি (একটি পঠন / ফাইল ফাইলটিতে লিখতে) ব্যবহার করতে পারেন, বা সম্ভবত এটির জন্য কোনও ডিরেক্টরি /dev/shmতৈরি করার পরিবর্তে যদি এটি আপনার জন্য কাজ করে তবে একটি ডিরেক্টরি ব্যবহার করতে পারেন tmpfs


এই কৌশলটি (বা এর বিভিন্নতা) কিছু বিতরণ লাইভসিডি দ্বারা ব্যবহৃত হয়। উইকিপিডিয়া এউফস এন্ট্রি কয়েকটি তালিকা।


+1 ধন্যবাদ! একটি প্রশ্ন: (1) fstabমাউন্ট পয়েন্টের সাথে এটি করা কি সম্ভব /? (অর্থাত্ সিস্টেমটি একটি বাতিলযোগ্য চিত্র থেকে বুট হয়ে যায়, বেশ কিছুটা))
মেহরদাদ

আমি তাই মনে করি না. যদি আপনি /এটির জন্য করতে চান তবে আমি বিশ্বাস করি আপনি একটি আরআরআরডি দিয়ে ভাল হবেন (এটি আমার বিশ্বাস লাইভসিডদের জন্য এটি করা হয়)। আপনি এটি একটি জটিল স্ক্রিপ্ট থেকে এটি করতে সক্ষম হতে পারেন যদিও এটি জটিল শোনায়।
মাদুর

8

হালনাগাদ:

মনে হচ্ছে উবুন্টুতে এটি করার আরও দুটি সহজ উপায় রয়েছে (কমপক্ষে পরবর্তী সংস্করণগুলি):

  1. sudo apt-get install overlayrootপরে সেট overlayroot="tmpfs:swap=1,recurse=0"করা/etc/overlayroot.local.conf

  2. sudo apt-get install fsprotectfsprotectকার্নেল প্যারামিটার হিসাবে পাস করার পরে


রুট ফাইল সিস্টেমের সাহায্যে এটি কীভাবে করা যায় তা অবশেষে আমি আবিষ্কার করেছি (উবুন্টু ১১.০৪-এ)!

একটি সিস্টেম বুটযোগ্য তৈরি করার পদক্ষেপগুলি সহজ। আমি ব্যবহৃত এই সহায়িকার সঙ্গে একযোগে এই সহায়িকার জিনিসটা কিভাবে এটি সঠিকভাবে কাজ করছে, বাগ ছাড়া পেতে এবং ওয়েবে অনুসন্ধান একটি গুচ্ছ।

সারাংশ:

  1. চালান:

    sudo apt-get install fsprotect apparmor-utils
    
  2. এই সংরক্ষণ /etc/initramfs-tools/scripts/init-bottom/__rootaufs। আমি মনে করি না নামটি আসলে গুরুত্বপূর্ণ, তবে __শুরুটি অর্ডার করার উদ্দেশ্যে ব্যবহৃত হতে পারে, তাই আপনি যদি নামটি পরিবর্তন করেন তবে আপনি আন্ডারস্কোরগুলি রাখতে চান। (এটি এই ফাইলটির একটি অনুলিপি ))

    #!/bin/sh -e
    
    case $1 in
      prereqs)
        exit 0
        ;;
    esac
    
    for x in $(cat /proc/cmdline); do
      case $x in
        root=*)
          ROOTNAME=${x#root=}
          ;;
        aufs=*)
          UNION=${x#aufs=}
        case $UNION in
          LABEL=*)
            UNION="/dev/disk/by-label/${UNION#LABEL=}"
            ;;
          UUID=*)
            UNION="/dev/disk/by-uuid/${UNION#UUID=}"
            ;;
        esac    
          ;;
      esac
    done
    
    if [ -z "$UNION" ]; then
        exit 0
    fi
    
    # make the mount points on the init root file system
    mkdir /aufs /ro /rw
    
    # mount read-write file system
    if [ "$UNION" = "tmpfs" ]; then
      mount -t tmpfs rw /rw -o noatime,mode=0755
    else
      mount $UNION /rw -o noatime
    fi
    
    # move real root out of the way
    mount --move ${rootmnt} /ro
    
    mount -t aufs aufs /aufs -o noatime,dirs=/rw:/ro=ro
    
    # test for mount points on union file system
    [ -d /aufs/ro ] || mkdir /aufs/ro
    [ -d /aufs/rw ] || mkdir /aufs/rw
    
    mount --move /ro /aufs/ro
    mount --move /rw /aufs/rw
    
    # strip fstab off of root partition
    grep -v $ROOTNAME /aufs/ro/etc/fstab > /aufs/etc/fstab
    
    mount --move /aufs /root
    
    exit 0
    
  3. ইন /etc/default/grub, লাইনে যে দিয়ে শুরু হয় এটি GRUB_CMDLINE_LINUX_DEFAULT, এবং কোট যে অনুসরণ ভিতরে, প্যারামিটার যোগ aufs=tmpfs

    বোনাস: আপনার যদি মাঝে মধ্যে অস্থায়ীভাবে পুনঃনির্দেশটি বন্ধ করতে হয়, কেবল কার্নেল প্যারামিটার তালিকা থেকে এই যুক্তিটি সরিয়ে দিন। GRUB মেনুটি দেখাতে সিস্টেম বুট করার সময় আপনি সম্ভবত শিফট কী ধরে রেখে এটি করতে পারেন; তারপরে পরামিতিগুলি সম্পাদনা করতে e টিপুন এবং aufs=...তালিকা থেকে প্যারামিটারটি মুছুন ।

  4. এই লাইনগুলিতে যুক্ত করুন /etc/sysctl.conf। ( সতর্কতা : সম্ভাব্য সুরক্ষা ঝুঁকি))

    kernel.yama.protected_nonaccess_hardlinks = 0
    kernel.yama.protected_sticky_symlinks = 0
    
  5. এই লাইনগুলি চালান:

    sudo aa-complain dhclient3
    sudo chmod 0755 /etc/initramfs-tools/scripts/init-bottom/__rootaufs
    sudo update-initramfs -k all -u
    sudo update-grub
    

যদি সবকিছু ঠিকঠাক হয়, আপনি পুনরায় বুট করার সময় আপনি এটি একটি অস্থায়ী ফাইল সিস্টেমে করছেন। র‌্যামের অংশটি হবে /rwএবং ডিস্ক চিত্রটি হবে /ro, তবে অবশ্যই এটি কেবল পঠনযোগ্য।

তবুও, যদি আপনি একটি অস্থায়ী সিস্টেমে বুট করে থাকেন তবে স্থায়ী পরিবর্তন প্রয়োজন হয়, আপনি এই বলে /roফাইল সিস্টেমটি পুনরায় মাউন্ট করতে পারেন

sudo mount -o remount,rw /ro

এটিকে লিখনযোগ্য করে তোলার জন্য এবং তারপরে আপনি সেই ডিরেক্টরিতে যা কিছু পরিবর্তন প্রয়োজন।


2

হ্যাঁ, unionfs দ্বারা দেখতে unionfs.filesystems.org । আপনার কাছে প্রথম পঠনযোগ্য কেবল ফাইল সিস্টেম মাউন্ট রয়েছে এবং ইউনিয়নফের মাধ্যমে দ্বিতীয় পাঠ্য-রাইটিং র্যাম ফাইল সিস্টেম হিসাবে।

উবুন্টুতে আপনি ইউনিয়নফস-ফিউজ প্যাকেজটি খুঁজে পেতে পারেন যা একই জিনিসগুলির আরেকটি বাস্তবায়ন, তবে ব্যবহারকারীর জায়গায়, কার্নেল মডিউল হিসাবে নয়।


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.