বিদ্যমান রাস্পবিয়ান ইনস্টলেশনটি ছোট এসডি কার্ডে অনুলিপি করুন


25

একটি বিদ্যমান এবং কনফিগার করা রাস্পবিয়ান ইনস্টলেশনটি কোনও ছোট এসডি কার্ডে অনুলিপি করা সম্ভব?

আমি যখন প্রথম রাস্পবিয়ান ইনস্টল করেছি তখন হাতে হাতে একটি 32 জিবি কার্ড ছিল যা অবশ্যই প্রয়োজনের চেয়ে বড়।


সিস্টেমটি আরও ভাল চলবে এবং কার্ডটি আপনার প্রাথমিক পার্টিশনের আরও মুক্ত স্থানের সাথে দীর্ঘস্থায়ী হবে, সুতরাং এটি খুব বেশি সঙ্কুচিত করবেন না - এটি আপনার ব্যবহারের কমপক্ষে দ্বিগুণ রাখুন (উদাহরণস্বরূপ, যদি আপনার সিস্টেমটি 2-3 গিগাবাইট হয় তবে এটি ব্যবহার করুন) 8 জিবি কার্ড এবং সমস্ত উপলব্ধ স্থান পূরণ করার জন্য পার্টিশনটি বৃদ্ধি করুন)। মনে রাখবেন যে আপনি যদি পার্টিশনটি শুরু করার জন্য বৃদ্ধি না করেন তবে এটি 32 গিগাবাইট হবে না, সুতরাং আপনাকে এটি সঙ্কুচিত করতে হবে না।
স্বর্ণলোকস

এটি দেখানোর জন্য ধন্যবাদ তবে আমার রাস্পবেরি বর্তমানে কেবলমাত্র 1.8 গিগাবাইট ব্যবহার করছে কারণ এটি সত্যিকারের প্রাথমিক ইনস্টলেশন। সুতরাং আমার ধারণা 4 জিবি যথেষ্ট হওয়া উচিত।
mwld

আমার ধারণা, আমি প্রথম দেবিয়ান হুইজি ইনস্টল করার সময় আমি এটি পূর্ণ আকারে বেড়েছি। এখন আমি এটি 2.5 গিগাবাইটে সঙ্কুচিত করেছি তবে এখনও কোনও সাফল্য পাইনি। নীচে আমার মন্তব্য দেখুন।
mwld


1
নীচের উত্তরের একটি উত্তর যদি আপনার প্রশ্নের সন্তুষ্ট হয় তবে দয়া করে উত্তরটি দেখুন।
ওয়েস মোডস

উত্তর:


12

এই উত্তরে, আমি লোকেরা সমাধানের পিছনে যুক্তি বুঝতে এবং তাদের অন্যান্য সমস্যার পদক্ষেপগুলি প্রয়োগ করতে সক্ষম হওয়ার জন্য ধাপে ধাপে কী করতে হবে তা আমি প্রদর্শন করি।

তবে প্রথমত, এটি উল্লেখ করা উচিত যে এসডি কার্ড থেকে একটি ছোট (তবে তথ্যের জন্য যথেষ্ট বড়) এসডি কার্ডে ফাইল সিস্টেমে স্থানান্তরিত করা একটি জেনেরিক (রাস্পি নির্দিষ্ট নয়) সমস্যা।

আবশ্যকতা

একটি মাইক্রো এসডি কার্ড রিডার এবং লিনাক্স (আমি উবুন্টু পছন্দ করি) সহ একটি ল্যাপটপ এটি চলমান।

বর্ণমালা

PIBOX      : Raspberry Pi which is used
SD_CARD_A  : 8GB micro SD card which is used on PIBOX and on which Raspbian-lite (the OS) is installed
SD_CARD_B  : 2GB micro SD card which will be used on PIBOX and on which Raspbian-lite (the OS) will be installed

SD_CARD_A এর পার্টিশন

পিআইবক্স চলাকালীন, আমরা পার্টিশনগুলি তালিকাভুক্ত করি (অপ্রয়োজনীয় সিস্টেম পার্টিশনগুলি এখানে প্রদর্শিত হচ্ছে না)।

root@pibox:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      7.3G  1.1G  5.9G  16% /
/dev/mmcblk0p1 vfat       63M   21M   43M  33% /boot

যেমন SD_CARD_A 2 পার্টিশন আছে /এবং /boot। এমনকি 2 জিবি মোট ব্যবহার করা হয় না।

ব্যাকআপ এসডি_কার্ড_এ

আমরা পিআইবিএক্সকে শাটডাউন এবং থামানোর পরে, আমরা পিআইবক্স বোর্ড থেকে এসডি_কার্ড_এ বের করে আমাদের ল্যাপটপের কার্ড রিডারে রাখি।

SD_CARD_A এর পার্টিশন স্বয়ংক্রিয়ভাবে হিসাবে আমাদের সিস্টেমে মাউন্ট করা হয় /dev/sdc1এবং /dev/sdc2

root@mylaptop:~# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
/dev/sdb2                     ext4       22G   13G  7.9G  63% /
/dev/sdb1                     vfat      197M  2.6M  195M   2% /boot/efi
/dev/sda8                     ext4       66G   11G   52G  17% /home
/dev/sdc1                     vfat       63M   21M   43M  33% /media/some_user_name/boot
/dev/sdc2                     ext4      7.3G  1.1G  5.9G  16% /media/some_user_name/some_uuid_serial

সেগুলি সফলভাবে পরিচালিত করার জন্য আমরা আমাদের সিস্টেম থেকে এই পার্টিশনগুলি আনমাউন্ট করি।

root@mylaptop:~# umount /dev/sdc1
root@mylaptop:~# umount /dev/sdc2

আমরা পরবর্তী পদক্ষেপগুলিতে নিশ্চিতকরণের জন্য বিশদে SD_CARD_A এর ডিভাইস তথ্য প্রদর্শন করি।

root@mylaptop:~# fdisk -l /dev/sdc
Disk /dev/sdc: 7969 MB, 7969177600 bytes
246 heads, 62 sectors/track, 1020 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2019f6d8

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/sdc2          137216    15564799     7713792   83  Linux

উপরে আপনি দেখতে পাচ্ছেন যে SD_CARD_A এর 8GB গিগাবাইটের ক্ষমতা রয়েছে।

আমরা SD_CARD_A কে পাইবক্স.আইএমজি ফাইলটিতে ক্লোন করেছি।

root@mylaptop:~# dd bs=4MB if=/dev/sdc of=pibox.img
1992+1 records in
1992+1 records out
7969177600 bytes (8.0 GB) copied, 416.582 s, 19.1 MB/s

অনুলিপি করা বাইটের আকার পরীক্ষা করুন, এটি fdisk -l /dev/sdcকমান্ড অনুসারে আমরা যে মানের পেয়েছি তার সমান ।

লিনাক্স লুপব্যাক মডিউল

লিনাক্সের লুপব্যাক নামে একটি মডিউল রয়েছে যা আমাদের একটি ফাইলকে ব্লক ডিভাইস হিসাবে পরিচালনা করতে সহায়তা করে।

আমরা লুপব্যাক মডিউল লোড করি।

root@mylaptop:~# modprobe loop

আমরা একটি অব্যবহৃত লুপব্যাক ডিভাইস পাথ খুঁজে পাই।

root@mylaptop:~# losetup -f /dev/loop0

এখন, আমরা পাইবক্স.আইএমজি ফাইলের জন্য একটি লুপব্যাক ডিভাইস তৈরি করি।

root@mylaptop:~# losetup /dev/loop0 pibox.img

পার্টিশন পরিবর্তন সম্পর্কে আমরা কার্নেলটি ট্রিগার করি।

root@mylaptop:~# partprobe /dev/loop0

আমরা পূর্ববর্তী অপারেশনগুলি সফল কিনা তা নিশ্চিত করি confirm

root@mylaptop:~# losetup /dev/loop0
/dev/loop0: [0806]:69 (/root/pibox.img)

লুপব্যাক ডিভাইস সম্পর্কিত তথ্যটি এসডি_সিএআরডি_এর সাথে তুলনা করার জন্য বিশদভাবে প্রদর্শন করি।

root@mylaptop:~# fdisk -l /dev/loop0
Disk /dev/loop0: 7969 MB, 7969177600 bytes
255 heads, 63 sectors/track, 968 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2019f6d8

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/loop0p2          137216    15564799     7713792   83  Linux

উপরে আপনি দেখতে পারবেন যে লুপব্যাক ডিভাইসের আকার (= 7969177600 বাইট) এবং পার্টিশনগুলি SD_CARD_A এর সাথে একই।

বেসিক ম্যাথস

এখন থেকে, আমরা পার্টিশন উপর দৃষ্টি নিবদ্ধ করা হবে /dev/loop0p2। এর নামকরণ করুন THE_PARTITION

ব্লকের আকার 512 বাইট (ইউনিট = সেক্টর দিয়ে শুরু হওয়া লাইনে মুদ্রিত হিসাবে .....)

THE_PARTITION 137216 ব্লক থেকে শুরু হয়ে 15564799 ব্লকের সমাপ্ত হবে যার অর্থ এটির আকার 15427584 blocks(= 15564799 - 137216 + 1) রয়েছে।

সুতরাং, বাইটে THE_PARTITION এর আকার 7898923008 bytes(= 512 * 15427584)।

এসডি_কার্ড_বিতে THE_PARTITION ফিট করার জন্য, আমরা এটির একটি নতুন আকার 3710940 blocks বা অন্য কথায় 1900001280 bytes(= 512 * 3710940) রাখতে চাই to

সুতরাং, নতুন প্রান্তের ব্লক নম্বর 3848155গণনা করা হয় start block number(= 137216) + size in blocks(= 3710940) - দ্বারা 1

ফাইল সিস্টেম বনাম পার্টিশন

2 টি অপারেশন রয়েছে যা একে অপরের জন্য ভুল হওয়া উচিত নয়।

  • ফাইল সিস্টেমের আকার পরিবর্তন করা হচ্ছে। ফাইলের আকারটি সেট করে আমরা THE_PARTITION এ ফাইল সিস্টেম সঙ্কুচিত করব 3710940 blocks
  • পার্টিশনের আকার পরিবর্তন করা হচ্ছে। এর শেষ ব্লক নম্বরটি সেট করে আমরা THE_PARTITION সঙ্কুচিত করব 3848155

সঙ্কুচিত ফাইল সিস্টেম

ফাইল সিস্টেম সঙ্কুচিত করার আগে এটি দ্বারা পরিষ্কার হিসাবে চিহ্নিত করা উচিত e2fsck

root@mylaptop:~# e2fsck -f /dev/loop0p2
e2fsck 1.42.9 (4-Feb-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/loop0p2: 41175/475776 files (0.2% non-contiguous), 309183/1928448 blocks

আমরা ফাইল সিস্টেমটি সঙ্কুচিত করি resize2fs

root@mylaptop:~# resize2fs /dev/loop0p2 3710940s
resize2fs 1.42.9 (4-Feb-2014)
Resizing the filesystem on /dev/loop0p2 to 463867 (4k) blocks.
The filesystem on /dev/loop0p2 is now 463867 blocks long.

সঙ্কোচন বিভাজন

THE_PARTITION নম্বরটি কী তা আমরা শিখি parted

root@mylaptop:~# parted /dev/loop0
GNU Parted 2.3
Using /dev/loop0
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model: Loopback device (loop)
Disk /dev/loop0: 7969MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system  Flags
 1      4194kB  70.3MB  66.1MB  primary  fat16        lba
 2      70.3MB  7969MB  7899MB  primary  ext4

(parted) quit

আমরা এর সাথে THE_PARTITION সঙ্কুচিত করি parted

root@mylaptop:~# parted /dev/loop0 unit s resizepart 2 3848155
Warning: Shrinking a partition can cause data loss, are you sure you want to continue?
Yes/No? Yes  

আমরা লুপব্যাক ডিভাইস দিয়ে সম্পন্ন করেছি। আমরা এটি বিচ্ছিন্ন।

root@mylaptop:~# losetup -d /dev/loop0

ছদ্মবেশী চিত্র ফাইল

আমরা নতুন পার্টিশন টেবিলটি যাচাই করি।

root@mylaptop:~# fdisk -l pibox.img 

Disk pibox.img: 7969 MB, 7969177600 bytes
255 heads, 63 sectors/track, 968 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x2019f6d8

    Device Boot      Start         End      Blocks   Id  System
pibox.img1            8192      137215       64512    c  W95 FAT32 (LBA)
pibox.img2          137216     3848155     1855470   83  Linux

আউটপুটে, এটি স্পষ্টভাবে দেখা যায় যে THE_PARTITION এর শেষ ব্লকের সংখ্যা হ্রাস পেয়েছে from 15564799 to 3848155

সর্বশেষ ব্লকটি আমরা ব্যবহার করি 3848155। ব্লক নম্বরটি 0 থেকে শুরু হয় So সুতরাং, আমাদের মোট 3838155 + 1 টি ব্লক রয়েছে এবং পাইবক্স.আইএমজি ফাইলের নতুন আকারটি হওয়া উচিত 1970255872 bytes (= (3848155 + 1) * 512)।

আমরা পাইবক্স.আইএমজি ফাইলটি ছাঁটাই করি।

root@mylaptop:~# truncate --size=1970255872 pibox.img

আমরা পাইবক্স.আইএমজি ফাইলের নতুন আকারটি যাচাই করি।

root@mylaptop:~# ls -l pibox.img 
-rw-r--r-- 1 root root 1970255872 Oct 13 21:53 pibox.img

SD_CARD_B তৈরি করা হচ্ছে

আমরা আমাদের ল্যাপটপের কার্ড রিডারে SD_CARD_B রেখেছি। SD_CARD_B এর পার্টিশন স্বয়ংক্রিয়ভাবে হিসাবে আমাদের সিস্টেমে মাউন্ট করা হয় /dev/sdc1এবং /dev/sdc2

root@mylaptop:~# df -Th
Filesystem                    Type      Size  Used Avail Use% Mounted on
/dev/sdb2                     ext4       22G   13G  7.9G  63% /
/dev/sdb1                     vfat      197M  2.6M  195M   2% /boot/efi
/dev/sda8                     ext4       66G   11G   52G  17% /home
/dev/sdc1                     vfat       63M   21M   43M  33% /media/some_user_name/boot
/dev/sdc2                     ext4      1.8G  1.6G   59M  97% /media/some_user_name/some_uuid_serial

উপরে আপনি দেখতে পাবেন যে SD_CARD_B এর 2GB ক্ষমতা রয়েছে।

SD_CARD_B সফলভাবে পরিচালনা করতে আমরা আমাদের সিস্টেম থেকে সেই পার্টিশনগুলি আনমাউন্ট করি।

root@mylaptop:~# umount /dev/sdc1
root@mylaptop:~# umount /dev/sdc2

আমরা পিডবক্স.আইএমজি ফাইলটিকে SD_CARD_B তে ক্লোন করেছি।

root@mylaptop:~# dd bs=4MB if=pibox.img of=/dev/sdc
492+1 records in
492+1 records out
1970255872 bytes (2.0 GB) copied, 646.967 s, 3.0 MB/s

অনুলিপি করা বাইটের আকার পরীক্ষা করুন, এটি ls -l pibox.imgকমান্ড অনুসারে আমরা যে মানের পেয়েছি তার সমান ।

পিবক্স বুট করা হচ্ছে

আমরা আমাদের ল্যাপটপ থেকে SD_CARD_B কে বের করে পিআইবক্স বোর্ডে রাখার পরে, আমরা সিস্টেমটি বুট করি এবং পাইবক্স কনসোলে লগইন করি।

আমরা পার্টিশনগুলি তালিকাবদ্ধ করি (কিছু অপ্রয়োজনীয় সিস্টেমের পার্টিশন এখানে প্রদর্শিত হচ্ছে না)।

root@pibox:~# df -Th
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/root      ext4      1.8G  1.1G  601M  64% /
/dev/mmcblk0p1 vfat       63M   21M   43M  33% /boot

ভাল একটা. আমি মনে করি লুপব্যাক সেট আপ করার সাথে আপনার কিছু জিনিস দীর্ঘ বাতাস এবং অপ্রয়োজনীয় হতে পারে, আপনি এটি পরীক্ষা করে দেখতে চাইতে পারেন। খুব অনুরূপ একটি প্রশ্ন থেকে খুব মিল: raspberrypi.stackexchange.com/a/29952/5538
স্বর্ণিলকস

@ গোল্ডিলোকস, পরীক্ষিত নয় তবে আমি মনে করি লুপব্যাক ব্যবহার করা জরুরি। আমি যতদূর জানি যে পার্টড সরাসরি চিত্রের ফাইলে কাজ করতে পারে না, এর ক্রিয়াকলাপগুলির জন্য এটির জন্য একটি ডিভাইস ইন্টারফেস দরকার।
vaha

হ্যাঁ তবে আমি মনে করি আপনি খুঁজে পাবেন যে আপনাকে বিরক্ত losetupবা এমনকি বিরক্ত করতে হবে না -o loop=whatever। অন্যান্য পোস্ট অনুসারে আমি কেবল ব্যবহার করি mount -o offset=123 /imagefilepath /mntpointএবং লুপব্যাকের ব্যবহার অন্তর্নিহিত। আমার ধারণা এখন লিনাক্সে এটি সাধারণভাবে সত্য - চেষ্টা করে দেখুন। আপনি পার্টিশনগুলি ভার্চুয়াল "লুপব্যাক ডিভাইস" এর মাধ্যমে মাউন্ট করা হয়েছে তা কেবলমাত্র এটি কমাতে পারেন।
স্বর্ণলোকস

5

আপনি যখন ব্যবহার করেছেন dd if=/dev/sdx of=/path/to/image bs=1M, /dev/sdxপুরো "ডিস্ক" বোঝায় তাই চিত্রটি সর্বদা পুরো কার্ডের আকার হতে পারে।

পরিবর্তে, আপনাকে পার্টিশন নম্বরটি dd if=/dev/sdxn ...কোথায় ব্যবহার করতে হবে n

আপনার সম্ভবত এটি দুবার করা দরকার - একবার /bootপার্টিশনের জন্য এবং একবার এর জন্য/ পার্টিশনের জন্য।

তারপরে আপনাকে নতুন কার্ডে পার্টিশন তৈরি করতে হবে যা অন্তত সেই দুটি মূল কার্ডের চেয়ে কম বড়, কন্টেন্টটি ফিরে যেতে।


3

প্রাথমিক পার্টিশনটিকে ছোট আকারে সঙ্কুচিত করতে পার্টেড (পার্টিশন সম্পাদক) এর মতো কিছু ব্যবহার করুন এবং তারপরে এখন নতুন পার্টিশন থেকে আপনার নতুন কার্ডে অনুলিপি করতে ক্লোনজিলার মতো একটি সরঞ্জাম ব্যবহার করুন। যদিও আপনাকে অন্য কম্পিউটারে সম্ভবত এটি করতে হবে।


দুর্ভাগ্যক্রমে এটি কার্যকর হয়নি। আমি জিপিআর্টেড দিয়ে পার্টিশনটি 2.5 গিগাবাইটে সঙ্কুচিত করেছি। তবে আমি যখন এটি থেকে ইউএসবি স্টিকে একটি চিত্র তৈরি করার চেষ্টা করেছি তখন এটি বেশ বড় আকারের হয়ে উঠল (৪.৩ গিগাবাইট - তবে আমি মনে করি এটি পুরো ৩২ জিবি অনুলিপি করতে চেয়েছিল এবং FAT ফাইলের আকার সীমাবদ্ধতার কারণে এটি কেবল ৪.৩ গিগাবাইটে থামল)।
mwld

2
আমি dd if=/dev/sdx of=/path/to/image bs=1Mএই থ্রেডটি থেকে কমান্ডটি ব্যবহার করেছি : raspberrypi.stackexchange.com/questions/311/…
mwld

আমি কীভাবে 2.5 গিগাবাইটের সাহায্যে প্রাথমিক পার্টিশনটি কোনও ছবিতে অনুলিপি করতে পারি এবং এখনও এটি থেকে বুটেবল রাস্পিয়ান দিয়ে একটি এসডি কার্ড তৈরি করতে পারি সে সম্পর্কে আপনার কোনও ধারণা আছে?
mwld

বিলম্বিত প্রতুত্তরের জন্য দুঃখিত। আমি একটি 4 জিবি এসডি কার্ড দিয়ে শুরু করেছি, একটি চিত্র তৈরি করেছি এবং তারপরে সেই চিত্রটি 8 জিবি এবং বৃহত্তর কার্ডগুলিতে লিখেছি। আমি যে কাজ করেছি তার জন্য এখনও বৃহত্তর পার্টিশন ব্যবহার করার দরকার নেই। আমি এমন কোনও সরঞ্জাম জানি না যা আপনাকে কেবল একটি এসডি কার্ডে পৃথক বিভাজনের চিত্র তৈরি করতে দেয়।
জেরি গাগনন

3
  1. ইতিমধ্যে উল্লিখিত একটি পদ্ধতি ব্যবহার করে কার্ডের একটি চিত্র তৈরি করুন - আমি কীভাবে আমার রাস্পবেরি পাই ব্যাকআপ করব?

  2. চিত্রটি ছোট করে তুলতে http://sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer/ এ স্ক্রিপ্টটি ব্যবহার করুন

  3. একটি নতুন ছোট কার্ডে ডাউনসাইজড চিত্রটি পুনরুদ্ধার করুন


আমি আমার পৃষ্ঠায় রাস্পবিয়ান ইমেজ ব্যাকআপ রাখতে একই লক্ষ্য অর্জনের চেষ্টা করছি বলে আমি এই পৃষ্ঠায় ঝাঁপিয়ে পড়েছি তবে আমি কার্ডটি কেবলমাত্র পুরো সম্পর্কিত কার্ডই চাই না want উপরের পরামর্শ অনুসারে, আমি এখানে স্ক্রিপ্ট খুঁজছিলাম sirlagz.net/2013/03/10/script-automatic-rpi-image-downsizer তবে একটি খুঁজে পাইনি । এই লিঙ্কের কোনও আপডেট পাওয়া যায় যদি এটির কোথাও উপলব্ধ থাকে?
shallyverma

আমি এখনও লিঙ্কটি অ্যাক্সেস করতে পারি এবং পোস্টটি নিজেই একটি স্ক্রিপ্ট। স্ক্রিপ্টটি কোনও ফাইলে অনুলিপি করুন এবং নাম দিন script.sh, এটি ব্যবহার করে ফাইলটিকে এক্সিকিউটেবল করে তুলুন chmod
মিহির

1

আমি ব্যবহার করছি rsync আপাতত একটি ডিস্ক থেকে অন্য ডিস্কে ফাইল সিস্টেমগুলি অনুলিপি করতে , কোনও হিক্কি নেই। আরএসআইএনসি ব্যবহারের সুবিধাটি হ'ল এটি ডিভাইসের একটি ব্লক-স্তরের অনুলিপি না করে ফাইল সিস্টেমের সামগ্রীটি অনুলিপি করছে; ফলস্বরূপ, লক্ষ্য এবং উত্স ড্রাইভগুলি কত আকারের তা সত্যই তা বিবেচনা করে না, যতক্ষণ লক্ষ্য ড্রাইভে ডেটা ধরে রাখতে পর্যাপ্ত জায়গা থাকে।

সুতরাং আমি এখানে এটি কীভাবে করব:

  1. আপনার পছন্দসই নতুন, আরও ছোট এসডি কার্ডে একটি নতুন রাস্পিয়ান ইনস্টলেশন তৈরি করুন।
  2. নতুন ইনস্টলেশনটিতে বুট করুন এবং পুরো ডিস্কটি পূরণ করতে ফাইল সিস্টেমটি প্রসারিত করুন। বন্ধ পাই।
  3. এখন নতুন এবং পুরানো কার্ডগুলি মাউন্ট করুন এবং ব্যবহার করুন rsync -avx oldFilesystem newFilesystem থেকে ফাইল সিস্টেমের সাহায্যে নতুন কার্ডে ফাইল সিস্টেমটি অনুলিপি / ওভাররাইট করতে করুন।
  4. অবশেষে, আপনার নতুন সিস্টেমে বুট করুন এবং আপনার rpi-updateফার্মওয়্যারটি সামঞ্জস্যপূর্ণ এবং আপ টু ডেট রয়েছে তা নিশ্চিত করতে চালান ।

এর পরে, আপনার নতুন কার্ডে এটি পুরোপুরি কার্যকরী রাস্পিয়ান সিস্টেম ইনস্টল করা উচিত।


তাহলে এই পদ্ধতির জন্য (পদক্ষেপ 3), আমার 2 টি এসডি কার্ডের পাঠক দরকার?
ভিক্টর ভ্যান হি

হয় দুটি এসডি কার্ড পাঠক বা একটি মধ্যবর্তী ডিভাইস। আপনি আপনার হার্ড ড্রাইভের একটি ফোল্ডারে পুরানো ফাইল সিস্টেমটি সিঙ্ক করতে পারেন, তারপরে আপনি যদি কোনও পাঠক বাছাই করতে না চান তবে সেই ফোল্ডারটিকে দ্বিতীয় এসডি কার্ডে আরএসএনসি করতে পারেন।
sdenton4

1

আমি একটি এসডি কার্ডের সমস্ত ডেটা ব্যাকআপ এবং পুনরুদ্ধার করতে একটি শেল স্ক্রিপ্ট তৈরি করেছি। এটি প্রথমে কিছু ডেটা মুছে ফেলে (আমার প্রকল্পের সাথে সম্পর্কিত) এবং ন্যূনতম আকারে পার্টিশন সঙ্কুচিত করে তাই এসডি কার্ডের ডেটা যতটা বড় ছবিটি তত বড়। সংযোজন হিসাবে, স্ক্রিপ্ট চিত্রের একটি * .zip ফাইল তৈরি করে। তৈরি হওয়া চিত্রটিকে অন্য এসডি কার্ডে পুনরুদ্ধার করার পরে পার্টিশনটি সর্বোচ্চ আকারে বড় করা হবে। স্ক্রিপ্টটি অন্যান্য উত্তরগুলিতে বর্ণিত আদেশগুলি ব্যবহার করে। এই আকারের সাথে এটি আমার মুঠো শেল স্ক্রিপ্ট হিসাবে এটি তৈরি করতে আমার কয়েক ঘন্টা সময় লেগেছে এবং এটি নিখুঁত জেট নয়। বিশেষত আমি কীভাবে পুনরায় আকার 2fs এবং fdisk এর রিটার্ন মানগুলি পরিচালনা করতে জানি না তাই ব্যবহারকারীকে আমার প্রয়োজনীয় মানগুলি টাইপ করতে হবে। এটি ঠিক করার জন্য কোনও ধারণা আছে? আমি আশা করি এই স্ক্রিপ্টটি অন্য কাউকে সাহায্য করবে। এটি সম্পাদনা এবং উন্নত করতে নির্দ্বিধায়।

"Usage:
    <skriptname> -b <path>                  create backup of SC Card (dev/mmcblk0) to file <path>/JJJJ-MM-DD_HHMM.img
    <skriptname> -r <path>/FILENAME.img     restore an exitsting image (<path>/FILENAME.img) to the SD Card (dev/mmcblk0) 
    <skriptname> -r <path>/FILENAME.zip     unzip and restore an exitsting image (<path>/FILENAME.zip) to the SD Card (dev/mmcblk0)
    <skriptname> -h                         show this hlep

এটা এখানে:

#!/bin/bash 

# check if the user is root
if (( $EUID != 0 )); then
  echo "This script requires root privileges please run as root"
  exit
fi


while getopts ":b:r:h" opt; do
  case $opt in
    b)
      mode="backup"
      OUTPATH=$OPTARG
      ;;
    r)
      mode="restore"
      DIRFILENAME=$OPTARG
      ;;
    h)
      mode="help"
      ;;
    \?)
      echo "Invalid option: -$OPTARG. Use -h for help" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument. Use -h for help" >&2
      exit 1
      ;;
  esac
done
# no option
if [ $OPTIND == 1 ]
then
  echo "$(basename "$0") needs an option! Use -h for help"
  exit 1
fi


myMount(){
  # create mountpoint if not existing
  if [ ! -d /tmp/sd2/ ] ; then
    mkdir /tmp/sd2
  fi

  # mount partition
  mount -v -t ext4 /dev/mmcblk0p2 /tmp/sd2
  err=$?
  if [ $err != 0 ]; then
    echo "mount failed error: $err"
    exit 1
  fi
}

myUmount(){
  cd /home/ # otherwise umount will fail
  # fuser -vm /tmp/sd2/

  # umount partition
  umount -v /tmp/sd2
  err=$?
  if [ $err != 0 ]; then
    echo "umount failed error: $err"
    exit 1
  fi
}

myEnlarge(){
  echo "enlarge partition..."
  # enlarge partition is not posible with fdisk -> delete and recreate it
  (
  echo d # delete partition
  echo 2 # patition number
  echo n # add a new partition
  echo p # primary partition
  echo 2 # partition number
  echo   # first sector (accept default: varies)
  echo   # last sector (accept default: varies)
  echo w # write changes
  ) | fdisk /dev/mmcblk0

  echo "\n check filesystem... "
  e2fsck -f -v -C 0 /dev/mmcblk0p2

  # enlarge filesystem to maxsize
  resize2fs -p /dev/mmcblk0p2
}

case "$mode" in
"help")
  echo "Usage:
    $(basename "$0") -b <path>                  create backup of SC Card (dev/mmcblk0) to file <path>/JJJJ-MM-DD_HHMM.img
    $(basename "$0") -r <path>/FILENAME.img     restore an exitsting image (<path>/FILENAME.img) to the SD Card (dev/mmcblk0) 
    $(basename "$0") -r <path>/FILENAME.zip     unzip and restore an exitsting image (<path>/FILENAME.zip) to the SD Card (dev/mmcblk0)
    $(basename "$0") -h                         show this hlep
--------------------------------
Adrian Zeitler, Germany 2017"
  ;;
"backup")  ####################################### backup ####################################### 
  echo "an image of the SD Card (/dev/mmcblk0) whitch is as smal as possible will be created to $OUTPATH."
  # ------------------  delete some data --------------------

  echo "Do you want to delete tempfiles? [y/n]" 
  read delfiles

  if [ "$delfiles" = "y" ]
    then
      echo "Delete tempfiles..."

      myMount

      # remove some data
      cd /tmp/sd2/home/alarm/
      rm -v -f hagelbeere.db
      rm -v -f HAILcam.log
      rm -v -f HAILcam.log.1
      rm -v -f test.jpg

      myUmount

    elif [ "$delfiles" = "n" ]
      then
    echo "I don't delete anything."
    else
    echo "Sorry, I didn't understand."
    exit 1
  fi


  # --------------------------------------------------------------
  # shrink partition 2 to minimum size

  echo "check file system... "
  e2fsck -f -v -C 0 /dev/mmcblk0p2
  err=$?
  if [ $err != 0 ]; then
    echo "file system check failed, error: $err"
    exit 1
  fi

  echo "shrink filesystem of partition 2 to minimum size..."
  resize2fs -p -M /dev/mmcblk0p2
  err=$?
  if [ $err != 0 ]; then
    echo "resize2fs failed, error: $err"
    exit 1
  fi
  # --> Das Dateisystem auf /dev/mmcblk0p2 ist nun 692365 Blöcke groß.

  echo "Please tell me the new filesystem size displayed above:"
  read size
  # from resize2fs blocksize, fdisk wants sector: sector = block * 8
  size=$(( $size*8 ))

  # shrink partition is not posible with fdisk -> delete and recreate it
  (
  echo d # delete partition
  echo 2 # patition number
  echo n # add a new partition
  echo p # primary partition
  echo 2 # partition number
  echo   # first sector (accept default: varies)
  echo +$size  # last sector
  echo w # write changes
  ) | fdisk /dev/mmcblk0
  err=$?
  if [ $err != 0 ]; then
    echo "fdisk failed, error: $err"
    exit 1
  fi


  # --------------------------------------------------------------

  # fill unused space with zeros
  echo "Do you want to fill unused space with zeros? [y/n]" 
  read fillzeros


  if [ "$fillzeros" = "y" ]
    then
      echo "Copy zeros. This will end up with an error. But this is ok."

      myMount    

      dd if=/dev/zero | pv | dd of=/tmp/sd2/nullen.datei conv=noerror,notrunc,sync bs=10240
      # exits with error -> this is normal

      # dlelete zeros
      rm -v -f /tmp/sd2/nullen.datei
      sync

      myUmount

    elif [ "$fillzeros" = "n" ]
      then
    echo "I don't delete anything."
    else
    echo "Sorry, I didn't understand."
    exit 1
  fi

  # --------------------------------------------------------------

  # find out end of partition
  fdisk -l /dev/mmcblk0
  echo "Please tell me the end of mmcblk0p2 displayed above."
  read count



  DATE=$(date +"%Y-%m-%d_%H%M")
  IMGFILENAME=$DATE.img 
  echo "Do you want to create image with filename $OUTPATH$IMGFILENAME? [y/n]"
  read answer
  if [ "$answer" = "y" ]
  then
    echo "Do you want to create a *.zip file of the created image? [y/n]"
    read zip
    echo "Do you want to enlarge partition 2 to maxsize after image creation? [y/n]"
    read enlarge

    echo "create image..."
    cd $OUTPATH
    # create image with dd, stop at and of partition
    # count=N   copy only N input blocks
    # bs=BYTES  read and write up to BYTES bytes at a time = block size
    # pv    show status
    dd if=/dev/mmcblk0 | pv -s $(( $count*512 )) | dd of=$IMGFILENAME bs=512 count=$count
    err=$?
    if [ $err != 0 ]; then
      echo "dd failed error: $err"
      exit 1
    fi

    # --------------------------------------------------------------
    # create zip file
    # or like this:
    # sudo dd if=/dev/sdX | pv |gzip > /pfad/zur/datei.img.gz
    if [ "$zip" = "y" ]
    then
      echo "create zip file..."
      zip $DATE.zip $IMGFILENAME
    fi
    # --------------------------------------------------------------
  fi

  # --------------------------------------------------------------
  # enlarge partition 2

  if [ "$enlarge" = "y" ]
  then
    myEnlarge
  fi

  ;; #end case mode backup
"restore")  ####################################### restore ####################################### 
  #chek if image exists
  if [[ -s "$DIRFILENAME" ]]
  then
    # check if file is an image or zip file
    if [[ $DIRFILENAME =~ \.img$ ]]
    then
      IMGFILENAME=$(basename "$DIRFILENAME")
    elif [[ $DIRFILENAME =~ \.zip$ ]]
    then
      ZIPFILENAME=$(basename "$DIRFILENAME")
    else
      echo "Not the right file format. I accept *.img and *.zip"
      exit 1
    fi
  else
    echo "Image file does not exist."
    exit 1
  fi
  echo "the file $DIRFILENAME will be restored to the SD Card /dev/mmcblk0"

  #change to the path of the imagefile
  SOURCEPATH=$(dirname "$DIRFILENAME")
  cd $SOURCEPATH


  if [ "$ZIPFILENAME" != "" ]
  then
    echo "unzip file"
    # change file extention form zip zu img
    l=$(( ${#ZIPFILENAME}-3 ))
    IMGFILENAME="${ZIPFILENAME:0:l}img"
    unzip $ZIPFILENAME
  fi

  echo "Do you realy want to restore $SOURCEPATH/$IMGFILENAME to the SD card /dev/mmcblk0? 
  Warning: all data on the device /dev/mmcblk0 will be lost! [y/n]"
  read answer
  if [ "$answer" = "y" ]
  then
    echo "Do you want to enlarge partition 2 to maxsize after restoring? [y/n]"
    read enlarge
    echo "restore image..."
    filesize=$(wc -c <"$IMGFILENAME")
    echo "Filesize = $filesize Byte"
    dd if=$IMGFILENAME | pv -s $filesize | dd of=/dev/mmcblk0 bs=512
    err=$?
    if [ $err != 0 ]; then
      echo "dd failed error: $err"
      exit 1
    fi
  fi

  # --------------------------------------------------------------
  # enlarge partition 2
  if [ "$enlarge" = "y" ]
  then
    myEnlarge
  fi

  ;; #end case mode restore
esac

0

আমি খুঁজে পাওয়া সবচেয়ে সহজ সমাধানটি হ'ল উপরে বর্ণিত ডিডি কমান্ডগুলি ব্যবহার করে মূল বৃহত্তর কার্ডের ব্যাকআপ করা এবং তারপরে পাইরাইটার জাতীয় কিছু ব্যবহার করে চিত্রটি ছোট কার্ডে পুনরুদ্ধার করা। ডিডি পাশাপাশি কাজ করতে পারে ... নিশ্চিত না। পাইরাইটারটি রুমটি ফুরিয়ে যাওয়ার কারণে একটি ত্রুটি ফিরে পেয়েছিল, তবে যেহেতু চিত্রটিতে ছোট কার্ডের আকারের বাইরে কোনও আসল ডেটা নেই তা এটি খালি খাতগুলি কাটাচ্ছে। আমি নিশ্চিত নই যে এর কী কী প্রভাব রয়েছে ... পার্টিশনের জন্য চেক বা মেরামতের প্রয়োজন হতে পারে তবে আমি এটি যা পাইতে পেরেছিলাম তা যাচাই করতে পারি।


1
এটি একটি খুব বিপজ্জনক পরামর্শ, আপনি কখনই জানতে পারবেন না আকারের বাইরে কোনও তথ্য ছিল কিনা। আমরা আরও নির্ভরযোগ্য এবং কাজের সমাধানের জন্য প্রমাণিত হয়েছি।
লেনিক

আমি বিপজ্জনকভাবে বেঁচে থাকি, আমি কী বলতে পারি;) সমস্ত গম্ভীরতায় যদিও আমার কাছে ডিডি বা পার্টিশন মানচিত্রের সাথে কাজ করার অভিজ্ঞতা নেই, তাই আমি এখানে অনির্ধারিত অঞ্চলে আছি। আমি সম্ভবত ভাগ্যবান হয়েছি যেহেতু আমার কাছে কেবলমাত্র 800 এমবি ডেটা একটি 16 জিবি কার্ড থেকে 8 জিবি কার্ডে যাচ্ছে going যদিও কৌতূহলের বাইরে, সম্ভবত পার্টিশনের শুরুতে এটি সমস্ত গোষ্ঠীভূত করা হয়েছে তা নিশ্চিত করার জন্য প্রথমে ডেটা ডিফ্র্যাগ করার কোনও উপায় আছে কি? মনে হচ্ছে হ্যাকিশ তবে কি?
পুচ

আমি ডিফ্র্যাগ সম্পর্কে জানি না, তবে আপনি সম্ভবত আপনার পার্টিশনগুলির আকার পরিবর্তন করতে এবং এসডি কার্ডের শুরুতে সরাতে পারেন, সুতরাং তারা কেবল শুরুটি দখল করে। সাধারণ ডিডির চেয়ে কিছুটা বেশি সময় নেয় তবে ফলাফলগুলি অনেক বেশি নির্ভরযোগ্য।
লেনিক

0

আমি win32diskimager-RELEASE-0.1-r15-win32চিত্রটি পড়তে একটি পুরানো সংস্করণ ব্যবহার করি , এটি এমনকি 8 গিগাবাইট এসডি কার্ড থেকে 4 গিগাবাইটের একটি চিত্র তৈরি করে তারপরে উইন 32ডিস্কিমাগারের সর্বশেষতম সংস্করণ সহ চিত্রটি লিখে।

আমি পুরানো সংস্করণটি ব্যবহার করি কারণ পুরানোটি প্রতিটি ত্রুটি এড়িয়ে চলে।


নতুন সংস্করণে ০.৯৯ এর বিকল্প নেই, যা আপনাকে একই কাজ করতে দেয়, অর্থাত্, প্রতিটি ত্রুটি এড়িয়ে চলে? দুর্ভাগ্যক্রমে সোর্সফোজ পৃষ্ঠাটি উপলব্ধ কোনও বিকল্পের তালিকাতে উপস্থিত হয় না। প্রাক-বিটা সফটওয়্যারটি ব্যবহার করা কেবল হালকা ঝুঁকিপূর্ণ বলে মনে হচ্ছে
গ্রিননলাইন

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