zoukankan      html  css  js  c++  java
  • How to resize an OCFS2 filesystem on Linux

    The post outlines the steps to resize an OCFS2 filesystem on Linux. The procedure should first be tested in test before being performed against a production environment.

    1. Backup all data on the filesystem

    Repartitioning a disk/device is a destructive process that may result in complete loss of volume data. Backup the contents of the volume to be resized before proceeding.

    2. Globally unmount the filesystem to be resized

    OCFS2 filesystem resize can only be performed with the filesystem unmounted from all cluster nodes. Unmount the filesystem to be resized on all cluster nodes. Use the mounted.ocfs2 command to verify if any nodes still have the volume mounted e.g.:

    # mounted.ocfs2 -f
    Device    FS    Nodes
    /dev/sdb1 ocfs2 node01, node02
    /dev/sdc1 ocfs2 node01, node02
    /dev/sdg1 ocfs2 node01, node02
    # mounted.ocfs2 -f
    Device FS Nodes
    /dev/sdb1 ocfs2 Not mounted
    /dev/sdc1 ocfs2 Not mounted
    /dev/sdg1 ocfs2 Not mounted

    3. Perform a filesystem check

    Before resizing the device or filesystem, perform a filesystem check. Be sure to correct/address any issues before proceeding.

    # fsck.ocfs2 -fn /dev/sdb1
    Checking OCFS2 filesystem in /dev/sdb1:
    label: resizer
    uuid: 21 bd e3 16 a6 a6 4e 95 89 23 77 c9 0d 9e 24 02 
    number of blocks: 1048265
    bytes per block: 4096
    number of clusters: 1048265
    bytes per cluster: 4096
    max slots: 6
    
    /dev/sdb1 was run with -f, check forced.
    Pass 0a: Checking cluster allocation chains
    Pass 0b: Checking inode allocation chains
    Pass 0c: Checking extent block allocation chains
    Pass 1: Checking inodes and blocks.
    Pass 2: Checking directory entries.
    Pass 3: Checking directory connectivity.
    Pass 4a: checking for orphaned inodes
    Pass 4b: Checking inodes link counts.
    All passes succeeded.

    4. Resize the underlying device/partition

    The underlying LUN/device/partition upon which the filesystem resides must first be resized before the filesystem itself can be resized. The method, and therefore the commands required, to resize the device will differ depending upon the storage solution used. Note, as of OCFS2 version available at the time of writing this post, OCFS2 volumes may be resized larger, but not smaller.

    In the following example, the OCFS2 partition to be resized resides on partition /dev/sdb1 (an iSCSI target) that is resized from 4Gb to 8Gb.

    # df -kl /cfs03
    Filesystem   1K-blocks Used     Available  Use%  Mounted on
    /dev/sdb1    4193060   1578984  2614076    38%   /cfs03
    # mount -t ocfs2
    ...
    /dev/sdb1 on /cfs03 type ocfs2 (rw,_netdev,heartbeat=local)

    Before Resize

    # cat /proc/partitions | grep sdb
    8  16  4194304 sdb
    8  17  4194288 sdb1

    During Resize (LUN resized, but not partition)

    # cat /proc/partitions | grep sdb
    8  16  8388608 sdb
    8  17  4194288 sdb1

    When using OCFS2 filesystems on partitioned devices, always ensure to recreate the partition using the original Start cylinder and larger End cylinder.

    # fdisk /dev/sdb
    
    The number of cylinders for this disk is set to 8192.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
       (e.g., DOS FDISK, OS/2 FDISK)
    
    Command (m for help): p
    
    Disk /dev/sdb: 8589 MB, 8589934592 bytes
    64 heads, 32 sectors/track, 8192 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1        4096     4194288   83  Linux
    
    Command (m for help): d
    Selected partition 1
    
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
    p
    Partition number (1-4): 1
    First cylinder (1-8192, default 1): 
    Using default value 1
    Last cylinder or +size or +sizeM or +sizeK (1-8192, default 8192): 
    Using default value 8192
    
    Command (m for help): p
    
    Disk /dev/sdb: 8589 MB, 8589934592 bytes
    64 heads, 32 sectors/track, 8192 cylinders
    Units = cylinders of 2048 * 512 = 1048576 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1        8192     8388592   83  Linux
    
    Command (m for help): w
    The partition table has been altered!
    
    Calling ioctl() to re-read partition table.
    Syncing disks.
    Note: If using device sizes greater than 2Tb, use the parted utilty instead of fdisk to manage partitions.

    After device/partition resize, ensure that all cluster nodes’ operating systems detect the new sizing of the device/partition before proceeding. The following utilities/methods can be used to dynamically detect device/partition changes; partprobe, sfdisk, blockdev, cluster-wide node reboot. Use with caution, for example:

    # /sbin/partprobe /dev/sdb

    OR

    # /sbin/sfdisk -R /dev/sdb

    OR

    # /sbin/blockdev --rereadpt /dev/sdb

    Verify the kernel sees the modified device partition sizing. After Resize (both LUN and partition resized):

    # cat /proc/partitions | grep sdb
    8 16 8388608 sdb
    8 17 8388592 sdb1

    Note, depending on the kernel device naming scheme employed (udev, dm, EMC PowerPath etc.), the device file name used to refer to the device on one node may differ to that on other nodes and/or change to a different name – this is normal and expected.

    5. Resize the OCFS2 filesystem

    Once the device/partition has been resized and it’s new size visible to all cluster nodes, resize the OCFS2 filesystem using the tunefs.ocfs2 command. For example:

    # tunefs.ocfs2 -S /dev/sdb1
    tunefs.ocfs2 1.2.4
    Changing volume size from 1048572 blocks to 2097148 blocks
    Proceed (y/N): y
    Resized volume
    Wrote Superblock

    6. Perform filesystem check

    Having resized the OCFS2 partition, perform another filesystem check before attempting to mount the resized volume.

    # fsck.ocfs2 -fn /dev/sdb1
    Checking OCFS2 filesystem in /dev/sdb1:
      label:              resizer
      uuid:               22 02 bb 51 b2 90 4a 4d 82 30 13 5d cc dd 05 bc 
      number of blocks:   2097148
      bytes per block:    4096
      number of clusters: 2097148
      bytes per cluster:  4096
      max slots:          6
    
    /dev/sdb1 was run with -f, check forced.
    Pass 0a: Checking cluster allocation chains
    Pass 0b: Checking inode allocation chains
    Pass 0c: Checking extent block allocation chains
    Pass 1: Checking inodes and blocks.
    Pass 2: Checking directory entries.
    Pass 3: Checking directory connectivity.
    Pass 4a: checking for orphaned inodes
    Pass 4b: Checking inodes link counts.
    All passes succeeded.

    7. Mount the resized OCFS2 volume

    Remount the resized OCFS2 filesystem on all cluster nodes.

    # mounted.ocfs2 -f
    Device FS Nodes
    /dev/sdc1 ocfs2 node01, node02
    /dev/sdf1 ocfs2 node01, node02
    /dev/sdb1 ocfs2 node01, node02
    # mount -t ocfs2
    /dev/sdb1 on /cfs03 type ocfs2 (rw,_netdev,heartbeat=local)
    ...
    # df -kl /cfs03
    Filesystem   1K-blocks Used     Available Use% Mounted on
    /dev/sdb1    8388592   1579120  6809472   19%  /cfs03
    喜欢请赞赏一下啦^_^

    微信赞赏

    支付宝赞赏

  • 相关阅读:
    Linux常用命令
    C# 报表设计器 (winform 设计端)开发与实现生成网页的HTML报表
    完成复杂表头列表
    流程设计--页面介绍
    流程设计--设计理念
    报表设计--坐标实例-位移坐标
    Spring MVC 工作原理--自我理解
    java ==、equals和hashCode的区别和联系
    java 自动装箱和拆箱
    java maven笔记
  • 原文地址:https://www.cnblogs.com/lkj371/p/15319402.html
Copyright © 2011-2022 走看看