~ubuntu-branches/ubuntu/vivid/parted/vivid

« back to all changes in this revision

Viewing changes to tests/t3000-resize-fs.sh

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2014-07-21 10:23:16 UTC
  • mfrom: (7.2.32 sid)
  • Revision ID: package-import@ubuntu.com-20140721102316-jsyv3yzmbo8vlde5
Tags: 3.1-3
Upload to unstable.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/bin/sh
2
 
# exercise the resize sub-command; FAT and HFS only
 
2
# exercise the resize library; FAT and HFS+ only
3
3
 
4
 
# Copyright (C) 2009-2010 Free Software Foundation, Inc.
 
4
# Copyright (C) 2009-2012 Free Software Foundation, Inc.
5
5
 
6
6
# This program is free software; you can redistribute it and/or modify
7
7
# it under the terms of the GNU General Public License as published by
16
16
# You should have received a copy of the GNU General Public License
17
17
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
18
 
19
 
if test "$VERBOSE" = yes; then
20
 
  set -x
21
 
  parted --version
22
 
fi
23
 
 
24
 
: ${srcdir=.}
25
 
. $srcdir/t-lib.sh
 
19
. "${srcdir=.}/init.sh"; path_prepend_ ../parted .
26
20
require_hfs_
27
21
 
28
22
require_root_
29
23
require_scsi_debug_module_
30
24
require_512_byte_sector_size_
31
25
 
32
 
cat <<EOF > exp-warning || framework_failure
33
 
WARNING: you are attempting to use parted to operate on (resize) a file system.
34
 
parted's file system manipulation code is not as robust as what you'll find in
35
 
dedicated, file-system-specific packages like e2fsprogs.  We recommend
36
 
you use parted only to manipulate partition tables, whenever possible.
37
 
Support for performing most operations on most types of file systems
38
 
will be removed in an upcoming release.
39
 
EOF
40
 
 
41
26
ss=$sector_size_
42
27
 
43
28
start=63s
53
38
 
54
39
parted -s $dev mklabel gpt > out 2>&1 || fail=1
55
40
# expect no output
56
 
compare out /dev/null || fail=1
 
41
compare /dev/null out || fail=1
57
42
 
58
43
# ensure that the disk is large enough
59
44
dev_n_sectors=$(parted -s $dev u s p|sed -n '2s/.* \([0-9]*\)s$/\1/p')
64
49
for fs_type in hfs+ fat32; do
65
50
 
66
51
  # create an empty $fs_type partition, cylinder aligned, size > 256 MB
67
 
  parted -s $dev mkpart primary $fs_type $start $default_end > out 2>&1 || fail=1
68
 
  echo "Warning: The resulting partition is not properly aligned for best performance." > exp
69
 
  compare out exp || fail=1
 
52
  parted -a min -s $dev mkpart p1 $start $default_end > out 2>&1 || fail=1
 
53
  compare /dev/null out || fail=1
70
54
 
71
55
  # print partition table
72
56
  parted -m -s $dev u s p > out 2>&1 || fail=1
73
57
 
74
 
  # FIXME: check expected output
75
 
 
76
 
  # There's a race condition here: on udev-based systems, the partition#1
77
 
  # device, ${dev}1 (i.e., /dev/sde1) is not created immediately, and
78
 
  # without some delay, this mount command would fail.  Using a flash card
79
 
  # as $dev, the loop below typically iterates 7-20 times.
80
 
 
81
58
  # wait for new partition device to appear
82
 
  i=0
83
 
  while :; do
84
 
    test -e "${dev}1" && break; test $i = 90 && break;
85
 
    i=$(expr $i + 1)
86
 
    sleep .01 2>/dev/null || sleep 1
87
 
  done
88
 
  test $i = 90 && fail=1
 
59
  wait_for_dev_to_appear_ ${dev}1
89
60
 
90
61
  case $fs_type in
91
 
    fat32) mkfs_cmd='mkfs.vfat -F 32';;
92
 
    hfs*) mkfs_cmd='mkfs.hfs';;
 
62
    fat32) mkfs_cmd='mkfs.vfat -F 32'; fsck='fsck.vfat -v';;
 
63
    hfs*) mkfs_cmd='mkfs.hfs';         fsck=fsck.hfs;;
93
64
    *) error "internal error: unhandled fs type: $fs_type";;
94
65
  esac
95
66
 
98
69
 
99
70
  # NOTE: shrinking is the only type of resizing that works.
100
71
  # resize that file system to be one cylinder (8MiB) smaller
101
 
  parted -s $dev resize 1 $start $new_end > out 2> err || fail=1
 
72
  fs-resize ${dev}1 0 $new_end > out 2>&1 || fail=1
102
73
  # expect no output
103
 
  compare out /dev/null || fail=1
104
 
  compare err exp-warning || fail=1
105
 
 
106
 
  # print partition table
107
 
  parted -m -s $dev u s p > out 2>&1 || fail=1
108
 
 
109
 
  # compare against expected output
110
 
  sed -n 3p out > k && mv k out || fail=1
111
 
  printf "1:$start:$new_end:530082s:$fs_type:primary:$ms;\n" > exp || fail=1
112
 
  compare out exp || fail=1
 
74
  compare /dev/null out || fail=1
 
75
 
 
76
  # This is known to segfault with fsck.hfs from
 
77
  # Fedora 16's hfsplus-tools-332.14-12.fc15.x86_64.
 
78
  # You can build a working version from
 
79
  # git://cavan.codon.org.uk/hfsplus-tools.git
 
80
 
 
81
  # Skip the fsck.hfs test unless it understands the -v option.
 
82
  skip=0
 
83
  case $fs_type in
 
84
    hfs*) $fsck -v || { warn_ skipping $fsck test; skip=1; } ;; esac
 
85
 
 
86
  if test $skip = 0; then
 
87
    $fsck ${dev}1 > out || fail=1
 
88
    cat out
 
89
    # Oops.  Currently, fsck.hfs reports this:
 
90
    # Executing fsck_hfs (version 540.1-Linux).
 
91
    # ** Checking non-journaled HFS Plus Volume.
 
92
    #    The volume name is untitled
 
93
    # ** Checking extents overflow file.
 
94
    # ** Checking catalog file.
 
95
    # ** Checking multi-linked files.
 
96
    # ** Checking catalog hierarchy.
 
97
    # ** Checking volume bitmap.
 
98
    #    Volume bitmap needs minor repair for orphaned blocks
 
99
    # ** Checking volume information.
 
100
    #    Invalid volume free block count
 
101
    #    (It should be 67189 instead of 65197)
 
102
    #    Volume header needs minor repair
 
103
    # (2, 0)
 
104
    # FIXME: This means the HFS resizing code is wrong.
 
105
 
 
106
    # FIXME: parse "out" for FS size and verify that it's the new, smaller size
 
107
  fi
113
108
 
114
109
  # Remove the partition explicitly, so that mklabel doesn't evoke a warning.
115
110
  parted -s $dev rm 1 || fail=1
117
112
  # Create a clean partition table for the next iteration.
118
113
  parted -s $dev mklabel gpt > out 2>&1 || fail=1
119
114
  # expect no output
120
 
  compare out /dev/null || fail=1
 
115
  compare /dev/null out || fail=1
121
116
 
122
117
done
123
118