Snapshots are implemented by combining original data in a place where an
operational volume has been updated with data in a place where the
operational volume has not been updated. A snapshot management table
maintains a value indicating that update has not been conducted, or a
storage place of original data, for each of combinations of blocks in the
operational volume and the snapshots. If there is a snapshot in which
update has not been conducted in a update place at the time of update,
then original data is copied and the snapshot management table is
updated. The copied original data is managed by a difference block
management table, which has a value indicating whether respective
snapshots are referencing the data. If a snapshot is deleted, then the
value indicating that the snapshot is referencing is altered in all
entries in the difference block management table.