mkfs01.sh 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0-or-later
  3. # Copyright (c) 2015 Fujitsu Ltd.
  4. # Author: Guangwen Feng <fenggw-fnst@cn.fujitsu.com>
  5. #
  6. # Test mkfs command with some basic options.
  7. TST_CNT=5
  8. TST_SETUP=setup
  9. TST_TESTFUNC=test
  10. TST_OPTS="f:"
  11. TST_USAGE=usage
  12. TST_PARSE_ARGS=parse_args
  13. TST_NEEDS_ROOT=1
  14. TST_NEEDS_DEVICE=1
  15. TST_NEEDS_CMDS="blkid df"
  16. . tst_test.sh
  17. usage()
  18. {
  19. cat << EOF
  20. usage: $0 [-f <ext2|ext3|ext4|vfat|...>]
  21. OPTIONS
  22. -f Specify the type of filesystem to be built. If not
  23. specified, the default filesystem type (currently ext2)
  24. is used.
  25. EOF
  26. }
  27. parse_args()
  28. {
  29. TST_FS_TYPE="$2"
  30. }
  31. setup()
  32. {
  33. if [ -n "$TST_FS_TYPE" ]; then
  34. tst_require_cmds mkfs.${TST_FS_TYPE}
  35. fi
  36. ROD_SILENT mkdir -p mntpoint
  37. }
  38. mkfs_verify_type()
  39. {
  40. if [ -z "$1" ]; then
  41. blkid $2 -t TYPE="ext2" >/dev/null
  42. else
  43. if [ "$1" = "msdos" ]; then
  44. blkid $2 -t TYPE="vfat" >/dev/null
  45. else
  46. blkid $2 -t TYPE="$1" >/dev/null
  47. fi
  48. fi
  49. }
  50. mkfs_verify_size()
  51. {
  52. tst_mount
  53. local blocknum=`df -P -B 1k mntpoint | tail -n1 | awk '{print $2}'`
  54. tst_umount
  55. if [ $blocknum -gt "$2" ]; then
  56. return 1
  57. fi
  58. # Size argument in mkfs.ntfs denotes number-of-sectors which is 512bytes,
  59. # 1k-block size should be devided by this argument for ntfs verification.
  60. if [ "$1" = "ntfs" ]; then
  61. local rate=1024/512
  62. if [ $blocknum -lt "$(($2/$rate*9/10))" ]; then
  63. return 1
  64. fi
  65. else
  66. if [ $blocknum -lt "$(($2*9/10))" ]; then
  67. return 1
  68. fi
  69. fi
  70. return 0
  71. }
  72. mkfs_test()
  73. {
  74. local mkfs_op=$1
  75. local fs_type=$2
  76. local fs_op=$3
  77. local device=$4
  78. local size=$5
  79. if [ -n "$fs_type" ]; then
  80. mkfs_op="-t $fs_type"
  81. fi
  82. if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
  83. fs_op="$fs_op -f"
  84. fi
  85. local mkfs_cmd="mkfs $mkfs_op $fs_op $device $size"
  86. echo ${fs_op} | grep -q "\-c"
  87. if [ $? -eq 0 ] && [ "$fs_type" = "ntfs" ]; then
  88. tst_res TCONF "'${mkfs_cmd}' not supported."
  89. return
  90. fi
  91. if [ -n "$size" ]; then
  92. if [ "$fs_type" = "xfs" ] || [ "$fs_type" = "btrfs" ]; then
  93. tst_res TCONF "'${mkfs_cmd}' not supported."
  94. return
  95. fi
  96. fi
  97. ${mkfs_cmd} >temp 2>&1
  98. if [ $? -ne 0 ]; then
  99. grep -q -E "unknown option | invalid option" temp
  100. if [ $? -eq 0 ]; then
  101. tst_res TCONF "'${mkfs_cmd}' not supported."
  102. return
  103. else
  104. tst_res TFAIL "'${mkfs_cmd}' failed."
  105. cat temp
  106. return
  107. fi
  108. fi
  109. if [ -n "$device" ]; then
  110. mkfs_verify_type "$fs_type" "$device"
  111. if [ $? -ne 0 ]; then
  112. tst_res TFAIL "'${mkfs_cmd}' failed, not expected."
  113. return
  114. fi
  115. fi
  116. if [ -n "$size" ]; then
  117. mkfs_verify_size "$fs_type" "$size"
  118. if [ $? -ne 0 ]; then
  119. tst_res TFAIL "'${mkfs_cmd}' failed, not expected."
  120. return
  121. fi
  122. fi
  123. tst_res TPASS "'${mkfs_cmd}' passed."
  124. }
  125. test1()
  126. {
  127. mkfs_test "" "$TST_FS_TYPE" "" "$TST_DEVICE"
  128. }
  129. test2()
  130. {
  131. mkfs_test "" "$TST_FS_TYPE" "" "$TST_DEVICE" "16000"
  132. }
  133. test3()
  134. {
  135. mkfs_test "" "$TST_FS_TYPE" "-c" "$TST_DEVICE"
  136. }
  137. test4()
  138. {
  139. mkfs_test "-V"
  140. }
  141. test5()
  142. {
  143. mkfs_test "-h"
  144. }
  145. tst_run