Skip to content

ROCKPro64 - Anpassen resize_rootfs.sh

Angeheftet ROCKPro64
  • Nachdem wir nun von der PCIe NVMe SSD booten können, haben wir ein Problem, die Root Partition ist zu klein. Diese muss vergrößert werden.

    Macht das bitte erst auf einem Testsystem!!!

    rock64@rockpro64:~$ df -h  
    Filesystem      Size  Used Avail Use% Mounted on
    udev            960M     0  960M   0% /dev
    tmpfs           193M  7.7M  185M   4% /run
    /dev/nvme0n1p7  1.9G  1.1G  669M  62% /
    tmpfs           963M     0  963M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           963M     0  963M   0% /sys/fs/cgroup
    /dev/nvme0n1p6  112M  4.0K  112M   1% /boot/efi
    tmpfs           193M     0  193M   0% /run/user/1000
    

    Kamil hat ein Script mit Namen

    resize_rootfs.sh
    

    das liegt in

    /usr/local/sbin
    

    Inhalt

    #!/bin/bash
    
    if [[ "$(id -u)" -ne "0" ]]; then
            echo "This script requires root."
            exit 1
    fi
    
    dev=$(findmnt / -n -o SOURCE)
    
    case $dev in
            /dev/mmcblk*)
                    DISK=${dev:0:12}
                    NAME="sd/emmc"
                    ;;
    
            /dev/sd*)
                    DISK=${dev:0:8}
                    NAME="hdd/ssd"
                    ;;
    
             
            *)
                    echo "Unknown disk for $dev"
                    exit 1
                    ;;
    esac
    

    Das passen wir jetzt mal für NVMe an 😉

    #!/bin/bash
    
    if [[ "$(id -u)" -ne "0" ]]; then
            echo "This script requires root."
            exit 1
    fi
    
    dev=$(findmnt / -n -o SOURCE)
    
    case $dev in
            /dev/mmcblk*)
                    DISK=${dev:0:12}
                    NAME="sd/emmc"
                    ;;
    
            /dev/sd*)
                    DISK=${dev:0:8}
                    NAME="hdd/ssd"
                    ;;
    
            /dev/nvme0n1*)
                    DISK=${dev:0:12}
                    NAME="pcie/nvme"
                    ;;
    
    
            *)
                    echo "Unknown disk for $dev"
                    exit 1
                    ;;
    esac
    
    echo "Resizing $DISK ($NAME -- $dev)..."
    
    set -xe
    
    # move GPT alternate header to end of disk
    sgdisk -e "$DISK"
    
    # resize partition 7 to as much as possible
    echo ",+,,," | sfdisk "${DISK}" -N7 --force
    
    # re-read partition table
    partprobe "$DISK"
    
    # online resize filesystem
    resize2fs "$dev"
    
    echo "Resizing $DISK ($NAME -- $dev)..."
    
    set -xe
    
    # move GPT alternate header to end of disk
    sgdisk -e "$DISK"
    
    # resize partition 7 to as much as possible
    echo ",+,,," | sfdisk "${DISK}" -N7 --force
    
    # re-read partition table
    partprobe "$DISK"
    
    # online resize filesystem
    resize2fs "$dev"
    

    Den Befehl ausführen

    rock64@rockpro64:/usr/local/sbin$ sudo ./resize_rootfs.sh 
    Resizing /dev/nvme0n1 (pcie/nvme -- /dev/nvme0n1p7)...
    + sgdisk -e /dev/nvme0n1
    Warning: The kernel is still using the old partition table.
    The new table will be used at the next reboot or after you
    run partprobe(8) or kpartx(8)
    The operation has completed successfully.
    + sfdisk /dev/nvme0n1 -N7 --force
    + echo ,+,,,
    Checking that no-one is using this disk right now ... FAILED
    
    This disk is currently in use - repartitioning is probably a bad idea.
    Umount all file systems, and swapoff all swap partitions on this disk.
    Use the --no-reread flag to suppress this check.
    
    Disk /dev/nvme0n1: 232.9 GiB, 250059350016 bytes, 488397168 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
    Disklabel type: gpt
    Disk identifier: 4252573B-53A6-4918-89A6-7802D8D8031F
    
    Old situation:
    
    Device          Start     End Sectors  Size Type
    /dev/nvme0n1p1     64    8063    8000  3.9M Linux filesystem
    /dev/nvme0n1p2   8064    8191     128   64K Linux filesystem
    /dev/nvme0n1p3   8192   16383    8192    4M Linux filesystem
    /dev/nvme0n1p4  16384   24575    8192    4M Linux filesystem
    /dev/nvme0n1p5  24576   32767    8192    4M Linux filesystem
    /dev/nvme0n1p6  32768  262143  229376  112M Microsoft basic data
    /dev/nvme0n1p7 262144 4186111 3923968  1.9G Linux filesystem
    
    /dev/nvme0n1p7: 
    New situation:
    Disklabel type: gpt
    Disk identifier: 4252573B-53A6-4918-89A6-7802D8D8031F
    
    Device          Start       End   Sectors   Size Type
    /dev/nvme0n1p1     64      8063      8000   3.9M Linux filesystem
    /dev/nvme0n1p2   8064      8191       128    64K Linux filesystem
    /dev/nvme0n1p3   8192     16383      8192     4M Linux filesystem
    /dev/nvme0n1p4  16384     24575      8192     4M Linux filesystem
    /dev/nvme0n1p5  24576     32767      8192     4M Linux filesystem
    /dev/nvme0n1p6  32768    262143    229376   112M Microsoft basic data
    /dev/nvme0n1p7 262144 488397134 488134991 232.8G Linux filesystem
    
    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Re-reading the partition table failed.: Device or resource busy
    The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
    Syncing disks.
    + partprobe /dev/nvme0n1
    + resize2fs /dev/nvme0n1p7
    resize2fs 1.44.5 (15-Dec-2018)
    Filesystem at /dev/nvme0n1p7 is mounted on /; on-line resizing required
    old_desc_blocks = 1, new_desc_blocks = 30
    The filesystem on /dev/nvme0n1p7 is now 61016873 (4k) blocks long.
    

    Vor dem Neustarten mal abwarten bis die LED der SSD aufhört zu blinken! Sicher ist sicher 🙂

    Neustarten

    rock64@rockpro64:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            960M     0  960M   0% /dev
    tmpfs           193M  5.3M  188M   3% /run
    /dev/nvme0n1p7  230G  1.1G  219G   1% /
    tmpfs           963M     0  963M   0% /dev/shm
    tmpfs           5.0M  4.0K  5.0M   1% /run/lock
    tmpfs           963M     0  963M   0% /sys/fs/cgroup
    /dev/nvme0n1p6  112M  4.0K  112M   1% /boot/efi
    tmpfs           193M     0  193M   0% /run/user/1000
    rock64@rockpro64:~$ cd /usr/local/sbin
    

    Done. 🙂

  • Konnte Kamil davon überzeugen, das das eine gute Idee ist. Wir sind ja alle ein wenig faul 😉

  • Seit Release 0.10.10 ist das automatische Vergrößern der Root Partition mit drin 🙂

    • 0.10.10: Support automated resize when booting from nvme

    Einfach das Image auf die NVMe SSD schreiben, ab in den ROCKPro64 und fertig! Nach dem Booten wird die Partition dann automatisch auf die maximal mögliche Größe erweitert.

    Kamil hat das Script auch ein wenig angepasst.

    case $dev in
            /dev/mmcblk?p?)
                    DISK=${dev:0:12}
                    PART=${dev:13}
                    NAME="sd/emmc"
                    ;;
    
            /dev/sd??)
                    DISK=${dev:0:8}
                    PART=${dev:8}
                    NAME="hdd/ssd"
                    ;;
    
            /dev/nvme?n?p?)
                    DISK=${dev:0:12}
                    PART=${dev:13}
                    NAME="pcie/nvme"
                    ;;
    

    Das Resultat bei einer Samsung 979 EVO mit 500GB Speicher

    rock64@rockpro64:~$ df -h
       Filesystem      Size  Used Avail Use% Mounted on
       udev            918M     0  918M   0% /dev
       tmpfs           192M  5.2M  187M   3% /run
       /dev/nvme0n1p4  459G  1.2G  439G   1% /
       tmpfs           957M     0  957M   0% /dev/shm
       tmpfs           5.0M  4.0K  5.0M   1% /run/lock
       tmpfs           957M     0  957M   0% /sys/fs/cgroup
       /dev/nvme0n1p3  229M   44M  169M  21% /boot
       /dev/nvme0n1p2   12M     0   12M   0% /boot/efi
       tmpfs           192M     0  192M   0% /run/user/1000
    

    Perfekt. Danke Kamil!

  • ROCKPro64 - Debian Bullseye Teil 3

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    311 Aufrufe
    Niemand hat geantwortet
  • ROCKPro64 - PCIe Probleme

    Hardware
    3
    0 Stimmen
    3 Beiträge
    330 Aufrufe
    FrankMF

    Danke für dein Feedback.

  • Infrarot Empfänger

    Hardware
    1
    0 Stimmen
    1 Beiträge
    789 Aufrufe
    Niemand hat geantwortet
  • Image 0.6.57 - NVMe paar Notizen

    Verschoben Archiv
    1
    0 Stimmen
    1 Beiträge
    652 Aufrufe
    Niemand hat geantwortet
  • Armbianmonitor

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    1k Aufrufe
    Niemand hat geantwortet
  • stretch-minimal-rockpro64

    Verschoben Linux
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF

    Mal ein Test was der Speicher so kann.

    rock64@rockpro64:~/tinymembench$ ./tinymembench tinymembench v0.4.9 (simple benchmark for memory throughput and latency) ========================================================================== == Memory bandwidth tests == == == == Note 1: 1MB = 1000000 bytes == == Note 2: Results for 'copy' tests show how many bytes can be == == copied per second (adding together read and writen == == bytes would have provided twice higher numbers) == == Note 3: 2-pass copy means that we are using a small temporary buffer == == to first fetch data into it, and only then write it to the == == destination (source -> L1 cache, L1 cache -> destination) == == Note 4: If sample standard deviation exceeds 0.1%, it is shown in == == brackets == ========================================================================== C copy backwards : 2812.7 MB/s C copy backwards (32 byte blocks) : 2811.9 MB/s C copy backwards (64 byte blocks) : 2632.8 MB/s C copy : 2667.2 MB/s C copy prefetched (32 bytes step) : 2633.5 MB/s C copy prefetched (64 bytes step) : 2640.8 MB/s C 2-pass copy : 2509.8 MB/s C 2-pass copy prefetched (32 bytes step) : 2431.6 MB/s C 2-pass copy prefetched (64 bytes step) : 2424.1 MB/s C fill : 4887.7 MB/s (0.5%) C fill (shuffle within 16 byte blocks) : 4883.0 MB/s C fill (shuffle within 32 byte blocks) : 4889.3 MB/s C fill (shuffle within 64 byte blocks) : 4889.2 MB/s --- standard memcpy : 2807.3 MB/s standard memset : 4890.4 MB/s (0.3%) --- NEON LDP/STP copy : 2803.7 MB/s NEON LDP/STP copy pldl2strm (32 bytes step) : 2802.1 MB/s NEON LDP/STP copy pldl2strm (64 bytes step) : 2800.7 MB/s NEON LDP/STP copy pldl1keep (32 bytes step) : 2745.5 MB/s NEON LDP/STP copy pldl1keep (64 bytes step) : 2745.8 MB/s NEON LD1/ST1 copy : 2801.9 MB/s NEON STP fill : 4888.9 MB/s (0.3%) NEON STNP fill : 4850.1 MB/s ARM LDP/STP copy : 2803.8 MB/s ARM STP fill : 4893.0 MB/s (0.5%) ARM STNP fill : 4851.7 MB/s ========================================================================== == Framebuffer read tests. == == == == Many ARM devices use a part of the system memory as the framebuffer, == == typically mapped as uncached but with write-combining enabled. == == Writes to such framebuffers are quite fast, but reads are much == == slower and very sensitive to the alignment and the selection of == == CPU instructions which are used for accessing memory. == == == == Many x86 systems allocate the framebuffer in the GPU memory, == == accessible for the CPU via a relatively slow PCI-E bus. Moreover, == == PCI-E is asymmetric and handles reads a lot worse than writes. == == == == If uncached framebuffer reads are reasonably fast (at least 100 MB/s == == or preferably >300 MB/s), then using the shadow framebuffer layer == == is not necessary in Xorg DDX drivers, resulting in a nice overall == == performance improvement. For example, the xf86-video-fbturbo DDX == == uses this trick. == ========================================================================== NEON LDP/STP copy (from framebuffer) : 602.5 MB/s NEON LDP/STP 2-pass copy (from framebuffer) : 551.6 MB/s NEON LD1/ST1 copy (from framebuffer) : 667.1 MB/s NEON LD1/ST1 2-pass copy (from framebuffer) : 605.6 MB/s ARM LDP/STP copy (from framebuffer) : 445.3 MB/s ARM LDP/STP 2-pass copy (from framebuffer) : 428.8 MB/s ========================================================================== == Memory latency test == == == == Average time is measured for random memory accesses in the buffers == == of different sizes. The larger is the buffer, the more significant == == are relative contributions of TLB, L1/L2 cache misses and SDRAM == == accesses. For extremely large buffer sizes we are expecting to see == == page table walk with several requests to SDRAM for almost every == == memory access (though 64MiB is not nearly large enough to experience == == this effect to its fullest). == == == == Note 1: All the numbers are representing extra time, which needs to == == be added to L1 cache latency. The cycle timings for L1 cache == == latency can be usually found in the processor documentation. == == Note 2: Dual random read means that we are simultaneously performing == == two independent memory accesses at a time. In the case if == == the memory subsystem can't handle multiple outstanding == == requests, dual random read has the same timings as two == == single reads performed one after another. == ========================================================================== block size : single random read / dual random read 1024 : 0.0 ns / 0.0 ns 2048 : 0.0 ns / 0.0 ns 4096 : 0.0 ns / 0.0 ns 8192 : 0.0 ns / 0.0 ns 16384 : 0.0 ns / 0.0 ns 32768 : 0.0 ns / 0.0 ns 65536 : 4.5 ns / 7.2 ns 131072 : 6.8 ns / 9.7 ns 262144 : 9.8 ns / 12.8 ns 524288 : 11.4 ns / 14.7 ns 1048576 : 16.0 ns / 22.6 ns 2097152 : 114.0 ns / 175.3 ns 4194304 : 161.7 ns / 219.9 ns 8388608 : 190.7 ns / 241.5 ns 16777216 : 205.3 ns / 250.5 ns 33554432 : 212.9 ns / 255.5 ns 67108864 : 222.3 ns / 271.1 ns
  • bionic-containers-rockpro64

    Verschoben Linux
    2
    0 Stimmen
    2 Beiträge
    902 Aufrufe
    FrankMF

    Ich habe das jetzt mal endlich getestet 🙂

    https://forum.frank-mankel.org/topic/296/rockpro64-docker-image

  • ROCKPro64 - Platinenerkundung

    ROCKPro64
    1
    0 Stimmen
    1 Beiträge
    601 Aufrufe
    Niemand hat geantwortet