Одним из способов размещения необязательных аргументов в начале является использование shift
.
Что он делает, так это перемещает все аргументы на n шагов влево, удаляя те, которые идут ниже $1
. Без указания аргумента shift
число шагов равно 1.
В начале скрипта вы проверяете, соответствует ли первый аргумент структуре необязательного или первого обязательного аргумента.
Если это требуемый, вы ничего не делаете.
Если это необязательный, вы обрабатываете его и вызываете shift
.
Полезная вещь здесь заключается в том, что независимо от того, задан необязательный аргумент или нет, обязательные аргументы, скажем, 3, всегда будут с $1
по$3
после блока, в котором необязательный аргумент обрабатывается.
Я решил эту проблему благодаря превосходному описанию инженера-программиста Жана -Кристофа Бертона . Я бы сэкономил еще больше времени, если бы просто удалил огромную резервную копию, которую я сделал с каталогами и файлами.
Несмотря на то, что RAID10 показывает работоспособность примерно один раз в день, я вижу приведенные ниже журналы, которые, как я полагаю, означают замену SDD1:
Mar 15 06:12:57 ourserver kernel: ata18.00: failed command: READ DMA EXT
Mar 15 06:12:57 ourserver kernel: ata18.00: cmd 25/00:80:22:ba:c4/00:00:ab:00:00/e0 tag 31 dma 65536 in#012 res 51/40:00:6d:ba:c4
/00:00:ab:00:00/00 Emask 0x9 (media error)
Mar 15 06:12:57 ourserver kernel: ata18.00: status: { DRDY ERR }
Mar 15 06:12:57 ourserver kernel: ata18.00: error: { UNC }
Mar 15 06:12:57 ourserver kernel: ata18.00: configured for UDMA/133
Mar 15 06:12:57 ourserver kernel: sd 17:0:0:0: [sdd] tag#31 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=2s
Mar 15 06:12:57 ourserver kernel: sd 17:0:0:0: [sdd] tag#31 Sense Key : Medium Error [current]
Mar 15 06:12:57 ourserver kernel: sd 17:0:0:0: [sdd] tag#31 Add. Sense: Unrecovered read error - auto reallocate failed
Mar 15 06:12:57 ourserver kernel: sd 17:0:0:0: [sdd] tag#31 CDB: Read(10) 28 00 ab c4 ba 22 00 00 80 00
Mar 15 06:12:57 ourserver kernel: blk_update_request: I/O error, dev sdd, sector 2881796717 op 0x0:(READ) flags 0x0 phys_seg 2 prio class
0
Mar 15 06:12:57 ourserver kernel: ata18: EH complete
Mar 15 06:13:00 ourserver kernel: ata18.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Mar 15 06:13:00 ourserver kernel: ata18.00: irq_stat 0x40000001
Mar 15 06:13:00 ourserver kernel: ata18.00: failed command: READ DMA EXT
Mar 15 06:13:00 ourserver kernel: ata18.00: cmd 25/00:00:a2:ba:c4/00:09:ab:00:00/e0 tag 0 dma 1179648 in#012 res 51/40:00:41:bd:c
4/00:00:ab:00:00/00 Emask 0x9 (media error)
Mar 15 06:13:00 ourserver kernel: ata18.00: status: { DRDY ERR }
Mar 15 06:13:00 ourserver kernel: ata18.00: error: { UNC }
Mar 15 06:13:01 ourserver kernel: ata18.00: configured for UDMA/133
Mar 15 06:13:01 ourserver kernel: sd 17:0:0:0: [sdd] tag#0 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE cmd_age=3s
Mar 15 06:13:01 ourserver kernel: sd 17:0:0:0: [sdd] tag#0 Sense Key : Medium Error [current]
Mar 15 06:13:01 ourserver kernel: sd 17:0:0:0: [sdd] tag#0 Add. Sense: Unrecovered read error - auto reallocate failed
Mar 15 06:13:01 ourserver kernel: sd 17:0:0:0: [sdd] tag#0 CDB: Read(10) 28 00 ab c4 ba a2 00 09 00 00
Mar 15 06:13:01 ourserver kernel: blk_update_request: I/O error, dev sdd, sector 2881797441 op 0x0:(READ) flags 0x0 phys_seg 86 prio class 0
Mar 15 06:13:01 ourserver kernel: ata18: EH complete
Mar 15 06:13:04 ourserver kernel: ata18.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
Mar 15 06:13:04 ourserver kernel: ata18.00: irq_stat 0x40000001
Mar 15 06:13:04 ourserver kernel: ata18.00: failed command: READ DMA EXT
И smartctl
показывает это:
Error 45 occurred at disk power-on lifetime: 3736 hours (155 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 00 80 ff ff ff ef 00 1d+07:38:55.963 READ DMA EXT
27 00 00 00 00 00 e0 00 1d+07:38:55.906 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
ec 00 00 00 00 00 a0 00 1d+07:38:55.905 IDENTIFY DEVICE
ef 03 46 00 00 00 a0 00 1d+07:38:55.892 SET FEATURES [Set transfer mode]
27 00 00 00 00 00 e0 00 1d+07:38:55.830 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
Error 44 occurred at disk power-on lifetime: 3736 hours (155 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 00 00 ff ff ff ef 00 1d+07:38:52.146 READ DMA EXT
35 00 80 ff ff ff ef 00 1d+07:38:52.143 WRITE DMA EXT
35 00 80 ff ff ff ef 00 1d+07:38:52.142 WRITE DMA EXT
35 00 80 ff ff ff ef 00 1d+07:38:52.140 WRITE DMA EXT
27 00 00 00 00 00 e0 00 1d+07:38:52.112 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
Error 43 occurred at disk power-on lifetime: 3736 hours (155 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 00 80 ff ff ff ef 00 1d+07:38:49.220 READ DMA EXT
ea 00 00 00 00 00 a0 00 1d+07:38:49.163 FLUSH CACHE EXT
ca 00 01 2a 00 00 e0 00 1d+07:38:49.163 WRITE DMA
ea 00 00 00 00 00 a0 00 1d+07:38:49.162 FLUSH CACHE EXT
ea 00 00 00 00 00 a0 00 1d+07:38:49.136 FLUSH CACHE EXT
Error 42 occurred at disk power-on lifetime: 3736 hours (155 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 00 00 ff ff ff ef 00 1d+07:38:46.103 READ DMA EXT
27 00 00 00 00 00 e0 00 1d+07:38:46.075 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
ec 00 00 00 00 00 a0 00 1d+07:38:46.074 IDENTIFY DEVICE
ef 03 46 00 00 00 a0 00 1d+07:38:46.060 SET FEATURES [Set transfer mode]
27 00 00 00 00 00 e0 00 1d+07:38:46.033 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
Error 41 occurred at disk power-on lifetime: 3736 hours (155 days + 16 hours)
When the command that caused the error occurred, the device was active or idle.
After command completion occurred, registers were:
ER ST SC SN CL CH DH
-- -- -- -- -- -- --
40 51 00 ff ff ff 0f Error: UNC at LBA = 0x0fffffff = 268435455
Commands leading to the command that caused the error were:
CR FR SC SN CL CH DH DC Powered_Up_Time Command/Feature_Name
-- -- -- -- -- -- -- -- ---------------- --------------------
25 00 80 ff ff ff ef 00 1d+07:38:42.036 READ DMA EXT
35 00 00 ff ff ff ef 00 1d+07:38:42.032 WRITE DMA EXT
35 00 80 ff ff ff ef 00 1d+07:38:42.025 WRITE DMA EXT
27 00 00 00 00 00 e0 00 1d+07:38:41.997 READ NATIVE MAX ADDRESS EXT [OBS-ACS-3]
ec 00 00 00 00 00 a0 00 1d+07:38:41.996 IDENTIFY DEVICE
Также вижу это:
smartctl -A /dev/sdd1
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-5.5.8-200.fc31.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 10
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000f 101 099 006 Pre-fail Always - 203989872
3 Spin_Up_Time 0x0003 099 097 000 Pre-fail Always - 0
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 16
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 23
7 Seek_Error_Rate 0x000f 070 060 030 Pre-fail Always - 12419382
9 Power_On_Hours 0x0032 096 096 000 Old_age Always - 3774
10 Spin_Retry_Count 0x0013 100 100 097 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 020 Old_age Always - 10
184 End-to-End_Error 0x0032 100 100 099 Old_age Always - 0
187 Reported_Uncorrect 0x0032 001 001 000 Old_age Always - 101
188 Command_Timeout 0x0032 100 099 000 Old_age Always - 65537
189 High_Fly_Writes 0x003a 070 070 000 Old_age Always - 30
190 Airflow_Temperature_Cel 0x0022 072 060 045 Old_age Always - 28 (Min/Max 28/31)
194 Temperature_Celsius 0x0022 028 040 000 Old_age Always - 28 (0 19 0 0 0)
195 Hardware_ECC_Recovered 0x001a 044 006 000 Old_age Always - 203989872
197 Current_Pending_Sector 0x0012 100 100 000 Old_age Always - 105
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 105
199 UDMA_CRC_Error_Count 0x003e 200 200 000 Old_age Always - 0
240 Head_Flying_Hours 0x0000 100 253 000 Old_age Offline - 3774 (62 166 0)
241 Total_LBAs_Written 0x0000 100 253 000 Old_age Offline - 201703664
242 Total_LBAs_Read 0x0000 100 253 000 Old_age Offline - 1542427917